在公共列上连接两个 csv 文件并删除倒数第二列

在公共列上连接两个 csv 文件并删除倒数第二列

我有两个 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适用于最后指定的第一个文件,后续操作发生在最后一个文件上。这是因为awkFNR和中的特殊变量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)

相关内容