awk:2つのファイルのコピーを印刷します。

awk:2つのファイルのコピーを印刷します。

ファイル1:

23455|abc|xyz
23455|abc|xsd
34433|wer|sad
45655|fdf|fcd

ファイル2:

v343v|23455
z565z|23455
c9898|34433
b2323|45655

出力は次のようになります。

23455|abc|xyz|v343v
23455|abc|xyz|z565z
23455|abc|xsd|v343v
23455|abc|xsd|z565z
34433|wer|sad|c9898
45655|fdf|fcd|b2323

次のコマンドを使用しています。

awk -F'|' 'NR==FNR { a[$1]=$1"|"$2"|"$3; next} $2 > 0 {print a[$2] "|" $1}' file1 file2 > result.txt

ただし、結果のみが表示されます。

23455|abc|xsd|v343v
23455|abc|xsd|z565z
34433|wer|sad|c9898
45655|fdf|fcd|b2323

注:2つのファイルのデータはランダムな順序になっています。

ベストアンサー1

$ join -t '|' -2 2 file1 file2
23455|abc|xyz|v343v
23455|abc|xyz|z565z
23455|abc|xsd|v343v
23455|abc|xsd|z565z
34433|wer|sad|c9898
45655|fdf|fcd|b2323

これにより、2つのファイルに対してリレーショナルJOIN操作が実行されます。入力データでフィールド区切り文字として使用するように指示し、2つのファイルの最初のファイルの-t '|'代わりに2番目のファイルの2番目のフィールドを使用するように指示しますjoin|-2 2

これは、結合列が両方のファイルでソートされていると仮定します。

ソートされていない場合は、次のようにファイルを事前にソートします。

sort -t '|' -k1 -o file1 file1
sort -t '|' -k2 -o file2 file2

joinまたは、プロセスオーバーライドを使用して、この機能をサポートするシェルの呼び出しと同時に並べ替えます。

join -t '|' -2 2 \
    <( sort -t '|' -k1 file1 ) \
    <( sort -t '|' -k2 file2 )

おすすめ記事