Re: manipulate column
Davide Brini <[email protected]>
| Newsgroups | gmane.editors.sed.user |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 27 Sep 2013 10:35:40 +0200, "MOKRANI Rachid" <[email protected]> wrote: > Hi, > > > > I have two files. (with more than 5000 lines) > > > > The first file A.txt, > > > > Name_1; Firstname_1; address_A; phone_number; > > Name_2; Firstname_2; address_B; phone_number; > > Name_30; Firstname_3; address_C; phone_number; > > Name_45; Firstname_4; address_D; phone_number; > > Name_50; Firstname_5; address_E; phone_number; > > Name_60; Firstname_5; address_E; phone_number; > > > > > > The second file B.txt > > > > 0001;Name_1; Firstname_1; address_A; phone_number; > > 0002;Name_2; Firstname_2; address_B; phone_number; > > 0003; Name_3;Firstname_3; address_C; phone_number; > > 1111;Name_4; Firstname_4; address_D; phone_number; > > 5555;Name_5; Firstname_5; address_E; phone_number; > > 4567;Name_6; Firstname_6; address_F; phone_number; > > 1256;Name_7; Firstname_7; address_G; phone_number; > > 4953;Name_8; Firstname_8; address_H; phone_number; > > 7896;Name_60; Firstname_5; address_I; phone_number; > > 7897;Name_61; Firstname_61; address_J; phone_number; > > > > > > > > I would like to have : > > > > 0001;Name_1; Firstname_1; address_A; phone_number; > > 0002;Name_2; Firstname_2; address_B; phone_number; > > XXXX;Name_30; Firstname_3; address_C; phone_number; > > XXXX;Name_45; Firstname_4; address_D; phone_number; > > XXXX;Name_50; Firstname_5; address_E; phone_number; > > 7896;Name_60; Firstname_5; address_E; phone_number; This is trivial with awk: awk -F ';' ' NR==FNR { a[$2] = $1; next } { print ( ($1 in a) ? a[$1] : "XXXX" ) ";" $0 } ' fileB.txt fileA.txt Not so much with sed, but if you insist on using it, you can do sed 's|\([^;]*\);\([^;]*\);.*|s/^\2;/\1;\2;/;t| $a\ s/^/XXXX;/' fileB.txt | sed -f- fileA.txt -- D.