awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1
测试如下:
> cat file1
A,AB,100
B,BB,200
C,CC,300
> cat file2
A,AB,10
C,CC,30
D,DF,4
> awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1
A,AB,100,10
C,CC,300,30
>
-
FNR==NR{a[$1$2]=$3;next}
应用于第一个文件file2
- 它说直到
FNR==NR
执行代码块。
- FNR=当前文件的行号
- NR= 两个文件总行数。
- 因此,在上述语句之后,索引为的关联数组为
$1$2
和价值为$3
.
- Now
($1$2 in a && $3=$3","a[$1$2])
这执行的是FNR!=NR
.其中检查索引 $1$2 是否作为数组中的索引存在,然后第二个条件是将 file1 的第三个字段更改为$3=$3","a[$1$2]
so now $0
包含共同点($1$2
) 更改了其中第三个字段的行。
也必须为四个文件编写类似的逻辑。