ファイル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 )