0

私は2つのファイルを持っています:

1.txt

jeden:AA 
dwa:BB 
trzy:CC 
cztery:DD 
piec:EE 
szesc:FF 
ttttttt:to 
siedem:GG 
osiem:HH 
dziewiec:II 
dziesiec:JJ

2.txt

JJ:jola 
EE:ela 
BB:baska 
FF:flora 
II:irga 
AA:adam 
to:llll 
DD:darek 
CC:celina 
HH:hela 
GG:gosia

キーに基づいて2つのファイルをマージしたい。期待される結果:

jeden: adam 
dwa: baska 
trzy: celina 
cztery: darek 
piec: ela 
szesc: flora 
ttttttt: llll
siedem: gosia 
osiem: hela 
dziewiec: irga 
dziesiec: jola

私はこれを試しました:

$ awk -F ":" '{getline a < "2.txt" split(a, b, ":"); if($2==b[1]) print $1":", b[2]}' 1.txt 
ttttttt: llll 

ご協力ありがとうございました。

4

3 に答える 3

2

一方通行:

awk '
    BEGIN { 
        FS = "[: ]*"; 
        OFS = ":"; 
    } 
    FNR == NR { 
        keys[ $1 ] = $2; 
        next; 
    } 
    { 
        printf "%s%s %s\n", $1, OFS, ($2 in keys) ? keys[ $2 ] : "???"; 
    }
' 2.txt 1.txt

これにより、次の結果が得られます。

jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
ttttttt: llll
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
于 2012-10-14T13:12:16.097 に答える
1

これは、複数のステップで実行できます。

$ gawk -F: '{print $2 " " $1}' 1.txt | sort > 1.1.txt
$ gawk -F: '{print $1 " " $2}' 2.txt | sort > 2.1.txt
$ paste -d' ' 1.1.txt 2.1.txt | gawk '{print $2 ": " $4}'
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
ttttttt: llll
于 2012-10-14T13:11:09.587 に答える
1

これには coreutilsjoinを使用します。

join -t: -1 2 -2 1 -o 1.1 2.2 \
  <(sort -t: -k2,2 1.txt | sed -r 's/\s+$//') \
  <(sort           2.txt | sed -r 's/\s+$//')

結果:

jeden:adam
dwa:baska
trzy:celina
cztery:darek
piec:ela
szesc:flora
siedem:gosia
osiem:hela
dziewiec:irga
dziesiec:jola
ttttttt:llll

コロンの後に余分なスペースが本当に必要な場合は| sed 's/:/& /'、コマンドに追加します

于 2012-10-17T00:10:11.757 に答える