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
C列の2番目のファイルにハッシュマップを作成し、それを最初のファイルで次のように使用するだけです。次のアクションFNR==NR
は最後に指定された最初のファイルに適用され、後続のアクションは最後のファイルで発生します。これは、awk
、FNR
、およびNR
の特別な変数が、ファイルごとおよびファイル全体でそれぞれ行番号を追跡するためです。
awk -v FS="," -v OFS="," 'FNR==NR { unique[$1]=$2; next } $1 in unique { $NF=unique[$1]; }1' file2 file1
また試してみてください
join -t, -o1.1,1.2,1.3,1.4,1.5,2.2 <(sort file1) <(sort file2)