2つのcsv +最初のファイルの最初の列+ 2番目のファイルの最初の列を連結し、一致する列データのみを取得します。

2つのcsv +最初のファイルの最初の列+ 2番目のファイルの最初の列を連結し、一致する列データのみを取得します。

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

  • 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印刷します。

おすすめ記事