web-dev-qa-db-ja.com

共通の列で2つのcsvファイルを結合し、最後から2番目の列を削除します

2つのcsvファイルがあります。

file1:

C1, 1, 0, 1, 0, 1
C2, 1, 0, 1, 1, 0
C3, 0, 0, 1, 1, 0

file2:

C3, 1.2
C1, 2.3
C2, 1.8

(生成する)C列に基づいてこれら2つのファイルをマージしたい:

C1, 1, 0, 1, 0, 1, 2.3
C2, 1, 0, 1, 1, 0, 1.8
C3, 0, 0, 1, 1, 0, 1.2

次に、最後から2番目の列を削除します(生成するため)。

C1, 1, 0, 1, 0, 2.3
C2, 1, 0, 1, 1, 1.8
C3, 0, 0, 1, 1, 1.2
1
Coder

C列の2番目のファイルにハッシュマップを作成し、それを最初のファイルで次のように使用するだけです。次のアクションFNR==NRは最後に指定された最初のファイルに適用され、後続のアクションは最後のファイルで発生します。これは、awkFNR、およびNRの特別な変数が、ファイルごとおよびファイル全体でそれぞれ行番号を追跡するためです。

awk -v FS="," -v OFS="," 'FNR==NR { unique[$1]=$2; next } $1 in unique { $NF=unique[$1]; }1' file2 file1
1
Inian

また試してみてください

join -t, -o1.1,1.2,1.3,1.4,1.5,2.2 <(sort file1) <(sort file2)
1
RudiC