ファイルをマージするためのawkコマンド

ファイルをマージするためのawkコマンド

これら2つのファイルを一致する値にマージするには、awkコマンドが必要です。

Color:Green
Color:Yellow 
Color:Orange

そして

Green:Yes
Orange:Yes

そして得る

 Color:Green:Yes
 Color:Orange:Yes

答え1

使用と場所joinsortbash

$ join -t: -1 2  <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Green:Color:Yes
Orange:Color:Yes

フィールドを正しくソートするには:

$ join -t: -1 2 -o1.1,1.2,2.2 <( sort -t: -k2 colours.txt ) <( sort selected.txt )
Color:Green:Yes
Color:Orange:Yes

joinソートされた入力データに対してリレーショナルJOIN操作を実行します。この場合、結合フィールドは色であり、これは最初の:ファイルでは2番目の区切りフィールド、2番目のファイル:では最初の区切りフィールドとして表されます。

join -t: -1 2makeを介して、join最初のファイルの2番目のフィールドを「結合キー」フィールドとして選択し(最初のフィールドはデフォルトフィールドです)、これらの2つのフィールド<(...)(から置換bash)でソートされたデータを提供します。最初のものは、sort2番目に区切られたフィールド(色):で最初のファイルをソートするという点で「特別」です。

上記の2番目の例では、この-oフラグを使用して出力で表示したい内容と順序を明示的に指定します。

答え2

解決策は次のとおりですawk

awk -F':' 'NR==FNR{seen[$1]=$2; next} 
    ($2 in seen){print $0":"seen[$2]; next}1' file2  file1

入力する:

==> file1 <==
Color:Green
Color:Yellow
Color:Pinky
Color:Orange

==> file2 <==
Green:Yes
Orange:Yes
Yellow:No

出力:

Color:Green:Yes
Color:Yellow:No
Color:Pinky
Color:Orange:Yes

答え3

file1 が次のようになるとします。

color:green
color:yellow
color:orange

ファイル2は

green:yes
orange:yes

私はこれがあなたが望むものを生成すると思います。

awk -F ':' 'FNR==NR{a[$1]=$2;next}($2 in a){print a[$1]":"a[$2]} file2 file1

出力:

color:green:yes
color:orange:yes

関連情報