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
>