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.

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:

#!/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:

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)

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 :

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

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 !

awk '{ $1=sprintf("%s%9s",$1,"");}{print $0}' "file"