
我有两个 csv 文件:
文件1:
C1, 1, 0, 1, 0, 1
C2, 1, 0, 1, 1, 0
C3, 0, 0, 1, 1, 0
文件2:
C3, 1.2
C1, 2.3
C2, 1.8
我想根据 C 列(生成)合并这两个文件:
C1, 1, 0, 1, 0, 1, 2.3
C2, 1, 0, 1, 1, 0, 1.8
C3, 0, 0, 1, 1, 0, 1.2
然后删除倒数第二列(以生成):
C1, 1, 0, 1, 0, 2.3
C2, 1, 0, 1, 1, 1.8
C3, 0, 0, 1, 1, 1.2
答案1
您只需在 C 列上的第二个文件上创建一个哈希映射,然后在第一个文件上使用它,如下所示。接下来的操作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
答案2
也试试
join -t, -o1.1,1.2,1.3,1.4,1.5,2.2 <(sort file1) <(sort file2)