ファイル1.txt
name
abc
xyz
pqr
ファイル2.txt
name,addr,id
abc,hj,1
pqr,hj.2
jkd,hj,9
jh,jd,2
結果ファイル
name,addr,id
abc,hj,1
pqr,hj.2
ベストアンサー1
使用join
:
join -t, -o 0,1.2,1.3 <(sort <(tail -n +2 file2)) <(sort <(tail -n +2 file1))
abc,hj,1
pqr,hj,2
-t,
入力/出力フィールド区切り文字を次のように指定します。斑点。-o
指定されたフィールドのみを出力します。0
接続(最初)フィールドです(1.1
またはで置き換え可能2.1
)。形式は次のとおりですX.Y
。Y
X
tail -n +2 infile
最初の行を除くすべての行を返します。ヘッダーワイヤー。sort ...
各入力ファイルをソートします。
または以下を使用してawk
:
awk -F, 'NR==FNR {!seen[$1]; next} $1 in seen' file1 file2
name,addr,id
abc,hj,1
pqr,hj,2
-F,
指定された入力フィールドの区切り記号は次のとおりです。斑点。NR==FNR
;NR
最初のレコード/行読み取りで1に設定されます。アッ単一の入力ファイルまたは複数のファイルのすべてのレコード/行を読み取るまでインクリメントし、FNR
最初のレコード/行読み取りで1に設定されます。アッ現在の入力ファイルからすべてのレコード/行を読み取るまでインクリメントし、次のファイルで再び1にリセットされますNR==FNR
。アッ最初のfile1
入力ファイルを読み込んでおり、後続のブロックが実行されます。seen
次の行で呼び出される連想配列を作成します。ファイル1以前に設定されていない場合は、この配列のインデックスとして使用されます。$1 in seen
:2番目の項目のみが実行され、file2
そのファイルの最初の列が配列のキーと一致することを確認してseen
印刷します。