sed query


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed query
# 1  
Old 12-07-2006
sed query

I have a series of folders /temp/a /temp/b /temp/c

In folders a, b, and c, I have files
a1.txt..........a20.txt
b1.txt..........b40.txt &
c1.txt..........c60.txt

Each file has the same data format :-

Line 1 AAAAA aaaa
Line 2 BBB bbbbbb
Line 3 CCCC cccccc
Etc etc

I need to write a sed script which will go through all the files and reformat the data thus :-

Line 1 AAAAA aaaa
Line 2 BBB
Line 3 X bbbbbb
Line 4 CCCC cccccc
Etc etc

So I need to insert a CR/LF in line 2 position 4,
create a new Line 3 with a constant text (X) and the value of what was to the right of the previous Line 2 (bbbbbb)
and move the remaining lines one line down.

Can anyone help please ?
I don't know sed very well, and awk not at all.
# 2  
Old 12-07-2006
Does this work?
Code:
awk '{if(NR==2) print $1,"\nX",$2; else print}' filename > filename.new
mv filename.new filename

Run this through a loop on each file.

Note that I have assumed that the text in your files is just as you are showing it (exactly the same number and location of space characters to be specific). Even if it isn't you just need to change the awk a bit.
# 3  
Old 12-08-2006
SED solution

Code:
cd /a
for file in *
do
    sed "2 s/\(...\).\(.*\)/\1\\
    X \2/" $file > tmp
    mv tmp $file
done

# 4  
Old 12-08-2006
sed solution

Thanks Anbu23
When I posted yesterday, I simplified my problem, thinking that I could follow your logic, and apply it to my actual problem.
In fact, it is line 5 position 32 before which the CR/LF is to be inserted.
The new line 6 will contain fixed text from position 1 to 31 inclusive, (X)
and position 32 to 34 from line 5 will be dropped down to the same positions on line 6.
I tried
sed "5 s/\(...\).\(.*\)/\1\\
X \2/" $file > tmp
but this still spilt after 3 characters.

I tried
sed "5 s/\(.............................\).\(.*\)/\1\\
X \2/" $file > tmp
but got a syntax error.
Hope you can further help.
Thanks
# 5  
Old 12-08-2006
Previously you told that after first few chars in some line has to be moved to next line with X.But now you are telling that you need initial char and X and remaining char in new line.I am not able to get you.
Can you give me example?
# 6  
Old 12-08-2006
sed example

Hi Anbu23

input

Ref: 12345678^M
Value Date: 28-MAY-2006^M
Debit A/c: 54321235 - abcdef^M
Customer : 100210547 - abcdef^M
Debit Amount: 9999999999.00 USD^M
Description: wire to Wxxxxxx^M
^M
Exchange Rate: 1.00000^M
etc etc

should turn into

Ref: 12345678^M
Value Date: 28-MAY-2006^M
Debit A/c: 54321235 - abcdef^M
Customer : 100210547 - abcdef^M
Debit Amount: 9999999999.00^M
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx USD^M
Description: wire to Wxxxxxx^M
^M
Exchange Rate: 1.00000^M
etc etc

cutting & pasting has offset the display above,
but my earlier line 5 position 31 is accurate.
Please also note that there are lots of records in each file,
and all have to be reformatted.
Many thanks again
I do appreciate your support.
# 7  
Old 12-08-2006
try this one

awk '{if (match($0,"USD")){print $1 $2 $3,"\nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",$4} print $0}' file > newfile

I hope USD will come only in Debit Amount: field.

Regards,
cskumar
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed for query

Hi all, I am trying to remove quite a lot of numbers for a file I have which looks something along the lines of; 1,2,3,4,5,6 etc I have a list of numbers I want removing looking like; 10000 10987 16572 etc etc and have been trying to run; for id in `cat list` ; do sed -i -e... (8 Replies)
Discussion started by: JayC89
8 Replies

2. Shell Programming and Scripting

SED Query

Hi all, I am trying to use SED to input lines to a file in a specific place. So far I have; sed '/#NewEntry/ i\Insert this line' myfile.txt The output is printing to screen correctly but what is the best way to write it back to the file without overwriting everything? I tried adding >... (6 Replies)
Discussion started by: JayC89
6 Replies

3. OS X (Apple)

Sed query

Hello Im fairly familiar with using the sed command for substitution, however I have been passed a script which checks the logged on username and directory type with a sed section which I cant figure out. The sed function has me baffled and I cant find out from the man page what its trying to do... (1 Reply)
Discussion started by: costaanglais
1 Replies

4. Shell Programming and Scripting

sed query

I have a sed query. There is a line which has tilde and I want to separate this line using sed. The line is: ABP_ETC_ROOT=~xdmadm The query to get this line is: sed -n '/\(.*\)~\(.*\)/p' infile I want to get xdmadm from this line and I am using this sed command: sed -n... (5 Replies)
Discussion started by: som.nitk
5 Replies

5. Shell Programming and Scripting

sed query

hi i had posted this earlier.. got no reply !! how to change assigned value in a file using sed suppose the file contains age = 30; how to change it to age =50; i tried sed 's/^age*./age =50;' filename but i am getting the o/p as age =50; 30; plz hlp!! (4 Replies)
Discussion started by: gopsman
4 Replies

6. Shell Programming and Scripting

query on sed

I have done a script using sed which replaces a string in file. I face 2 problems, while using sed command. 1)last line of the file is missing. 2)if i am are using wild card character in the command, Its not taking the next matching pattern ie if I am giving the pattern abc*def to be replaced... (2 Replies)
Discussion started by: iceiceice
2 Replies

7. UNIX for Dummies Questions & Answers

Reg: Query in sed

Hi Penchal, I would appreciate if you can provide me a brief explanation on what you are trying to do in the commnad below. echo "6-9-2008" | sed 's/\(.\)-\(.\)-\(.*\)/\3-0\2-0\1/g' Thanks Amit (1 Reply)
Discussion started by: patelamit009
1 Replies

8. Shell Programming and Scripting

sed related query

Hi I have a file which looks like this //string = "abcd"; //info //string = "*pqrs"; //add string = "#123"; //sub //string = "#1234567890" data = check(string) //string = "#1234567890" I want to modify this as string = "#987"; //mult data = check(string) How do i do that? (1 Reply)
Discussion started by: gopsman
1 Replies

9. Shell Programming and Scripting

SED query

I'm writing a script which word counts the number of lines in two files. If one file is bigger than the other I'd like to edit one of the files to delete some lines to make both the same. It does not matter where in the file the lines are deleted from. It's expected that this will be ran from... (3 Replies)
Discussion started by: chog1010
3 Replies

10. Shell Programming and Scripting

sed query..

hi, I have an xml file and I need to replace the tags with different names all at a time here is what I have <cevalue> <cevalue1> <cevalue2> <cevalue3> <cevalue4> <cevalue5> and I need these like these... <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> I tried a few but... (2 Replies)
Discussion started by: mgirinath
2 Replies
Login or Register to Ask a Question