Re: manipulate column

Thierry Blanc <[email protected]>
Newsgroups gmane.editors.sed.user
Message-ID <[email protected]>
the problems by Rachid are similar.

Maybe a bash solution -- awfully slow, of course -- but easy to 
understand could help

while read IFS=';' A B C D E # read all column data into variables, IFS 
is field separator
do
     XXX="$(sed ...)"     # extract the data you need from other file
     if [[ -z "$XXX" ]]
         then
             echo  "XXX";$A;$B;$C ....
         else
             echo  $XXX;$A;$B;$C ....
         fi
done < file1. txt



On 28/09/13 15:16, Davide Brini wrote:
> 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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.