The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Google UNIX.COM


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
editing ELF file tejuwala Linux 1 05-17-2008 08:22 PM
Editing File using awk/sed Mohammed Shell Programming and Scripting 4 05-16-2007 08:00 AM
Editing the File using Awk awk_beginner Shell Programming and Scripting 3 04-06-2007 07:43 AM
Help with editing file dsravan Shell Programming and Scripting 4 01-31-2007 09:59 AM
File editing using awk rinku11 Shell Programming and Scripting 2 11-23-2006 07:34 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 09-22-2007
Registered User
 

Join Date: Sep 2007
Posts: 11
Editing file

Hi,
I am in a situation wherein am getting file file certailn values
suppose
1u56979hhghhklklkkkjkjkjk 0 0 0
The file will have values like above only.
I need to add another field of NULL value(of length 9) at the end of first column i.e.
It should like this after editing:
1u56979hhghhklklkkkjkjkjk<NULL> 0 0 0

Kindly help.
Reply With Quote
Forum Sponsor
  #2 (permalink)  
Old 09-23-2007
Registered User
 

Join Date: Sep 2007
Posts: 8
Lightbulb NUL terminate first field of each line?

Rahul,

It sounds like you're trying to NUL terminate the first (whitespace delimited) field (word) of each line in a text file.

That's a very odd request (because the ASCII NUL character is normally used to terminate strings ... but normally NOT embedded in text files ... so many tools that might be trying to read the file line by line would not handle the NUL character gracefully.

It's also possible that your shell or your copy of sed or whatever cannot handle this cleanly. So you might need to use GNU versions of these tools, or a copy of Perl or Python (or compile up a little utility in C, of course).

The most obvious attempt in plain bash would be:

Code:
#!/bin/bash
while IFS="" read line; do 
    set -- $line
    first_word="$1"
    shift
    echo -e "$firstword\000$*"
   done
This is written as a filter so you pipe you file through it. To verify that it's doing what you want you can pipe the output further through a command like cat -A or od -x to be sure it shows the NUL characters where you want them.

That might have some odd artifacts (due to the way that each line is parsed by the set -- command). This following one-liner works in two stages, using sed the first space on each line to a character "177" (octal) --- hex 0x7F, a.k.a. the "DEL" character; and then using the tr command to change that into an ASCII NUL:

Code:
sed -e 's/ /'$(echo -ne '\177')'/' /tmp/foo | tr '\177' '\00'  | cat -A
This assumes that the original file has no ASCII DEL character that you care about preserving ... and the example shows a cat -A just for your convenience. You'd replace that with an appropriate redirection to save your output.

JimD (former Linux Gazette AnswerGuy)
Reply With Quote
  #3 (permalink)  
Old 09-23-2007
Registered User
 

Join Date: Sep 2007
Posts: 11
oops...seems we are not on same page !

He JimD
Thanks for your effort ! But I think we are not on same path....!
Let me explain my requirement more simply now,...

In my file I am getting rows as like this :
Code:
1US500100010000010001920077000131973511115107128101771004460001204600004        0        0        0        0
1US500100010000010001920077000131973511115122115101771004460000889600007        0        0        0        0
1US500100010000010001920077000131973511115122115101771004460000889600848        0        0        0        0
1US500100010000010001920077000131973511115145123103111004129440199600034        0        0        0        0
1US500100010000010001920077000131973511115145123103111004129440199611798        0        0        0        0
1US500100010000010001920077000131973511115145123105731004129440254200959        0        0        0        0
1US500100010000010001920077000131973511151213161106591004460083113503316        0        0        0        0
1US500100010000010001920077000131973511151213161106591004460083246011470        0        0        0        0
1US500100010000010001920077000131973511617125150106821001258770530508226        0        0        0        0
1US500100010000010001920077000131973511617125150106821001258770530511107        0        0        0        0
1US500100010000010001920077000132240211115145123103111004129440199600034        0        0        0        0
1US500100010000010001920077000132240211115145123103111004129440199611798        0        0        0        0
(Note : kindly copy/paste above rows in notepad to get real view)
Now I need to add an extra field og length-9 after first column with NULL value.
So after editing a row should look like this:
1US500100010000010001920077000131973511115107128101771004460001204600004 0 0 0 0
i.e. <1stcolumn value><9 spaces><2nd col value>....and so on..

Let me also tell file has many rows of similar format and size of file is 24mb.

Kindly help....
Will wait for your reply.
Thanks
Reply With Quote
  #4 (permalink)  
Old 09-23-2007
Registered User
 

Join Date: Sep 2007
Posts: 11
Similarly in yet another requirement i need to add another field:
Field description:
Between 12 and 13 character in a row.i.e in first column
Value:NULL
Length:5
i.e 5 spaces after 12 th character in the first column.

Thanks !
Reply With Quote
  #5 (permalink)  
Old 09-23-2007
Registered User
 

Join Date: Sep 2006
Posts: 1,543
Code:
awk '{ $1=sprintf("%s%9s",$1,"");}{print $0}' "file"
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 06:17 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Global Fact Book

Content Relevant URLs by vBSEO 3.2.0