これら2つのファイルを一致する値にマージするには、awkコマンドが必要です。
Color:Green
Color:Yellow
Color:Orange
そして
Green:Yes
Orange:Yes
そして得る
Color:Green:Yes
Color:Orange:Yes
答え1
使用と場所join
:sort
bash
$ 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 2
makeを介して、join
最初のファイルの2番目のフィールドを「結合キー」フィールドとして選択し(最初のフィールドはデフォルトフィールドです)、これらの2つのフィールド<(...)
(から置換bash
)でソートされたデータを提供します。最初のものは、sort
2番目に区切られたフィールド(色):
で最初のファイルをソートするという点で「特別」です。
上記の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