最初のファイルの特定の列値と一致する2番目のファイルのすべての行を取得します。

最初のファイルの特定の列値と一致する2番目のファイルのすべての行を取得します。

2つのファイルがあります。

最初のファイル:

ab34,ax,55,gt
ab46,56,thy,ix
ab34,tg,47,xy
at87,kl,89,th
ab46,ut,87,er

2番目のファイル:

x1,ab34,78,got
wq,at87,100,op
90,ab46,la,gf

予想される結果:

ab34,ax,55,gt,x1,ab34,78,got
ab46,56,thy,ix,90,ab46,la,gf
ab34,tg,47,xy,x1,ab34,78,got
at87,kl,89,th,wq,at87,100,op
ab46,ut,87,er,90,ab46,la,gf

最初のファイルの最初の列の値に基づいて2番目のファイルの行をgrepしたいと思います。理想的な出力は、2番目のファイルと一致する行を含む最初のファイルを印刷することです。私は単純なUnixコマンドを書いていますが、これは私に少し面倒で、明らかにループ機能が必要です。

答え1

UNIXコマンドのアイデアのように見えます。まずソートする必要があります。

cat 1|sort > 1.sort
cat 2|sort -t, -k2  > 2.sort
join -t, -2 2 1.sort 2.sort

私はちょうどあなたの宿題を出しましたか?

答え2

私はあなたが本当に欲しいものについて多くの仮定をしていますが、これはあなたが望む出力例を生成します。もしそうなら、問題の私の解釈が正しいかもしれません。

awk 'NR==FNR{a[$2]=$0; next} {print $0,a[$1]}' FS=, OFS=, file2 file1

関連情報