awk - 一致する列に基づいて2つの.csvファイルをマージします。

awk - 一致する列に基づいて2つの.csvファイルをマージします。

多くの行を含む2つの.csvファイル(カンマ区切り)があります。次の2つのファイルのサンプル項目は次のとおりです。 n.csv:

X,I180,10.5.5.180,,833-006366,00,N-D,,,5.2,A52.604,5.2.02,,,,,,,8471 FX,,,,,

ファイル.csv:

X,3FE,1,I180,,,,I180:LT13,,,,,,,,,,,0,,,,,,NLS-A

私がしたいことは:

  • 1)f.csvのフィールド($ 2、$ 4、$ 8、$ 12、$ 25)を取得し、新しい出力.csvファイルの最初の列に印刷します。
  • 2)n.csvの$ 2がf.csvの$ 4と一致する場合は、n.csvファイルの$ 7フィールドを取得して、新しい出力.csvファイルの最後の列に印刷します。

したがって、必要な出力は次のようになります。

3FE,I180,I180:LT13,,NLS-A,N-D

次のコマンドを試しましたが、最後の列にn.csvファイルの$ 7が印刷されました。

awk 'BEGIN { FS = OFS = "," ; } FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[$2]} }' n.csv f.csv
3FE,I180,I180:LT13,,NLS-A,

私が何を見逃しているのかを理解するのに役立ちますか?

ベストアンサー1

$2から までn.csv合わないf.csv

努力する

awk 'BEGIN { FS = OFS = "," ; } 
  FNR==NR{ne_model[$2]=$7;x[$2]=$2;next} 
  { if ($4!="" && $4 in x)  {print $2,$4,$8,$12,$25,ne_model[x[$4]]} }' n.csv f.csv

私は(読みやすくするために複数行に分割しましたne_model[$2]ne_model[x[$4]]

これは

3FE,I180,I180:LT13,,NLS-A,N-D

おすすめ記事