1

有人可以帮忙比较两个文件吗,我使用了以下命令,但我无法成功,

awk -F, 'NR == FNR {a[$1,$2]; next} (($1,$2) in a )' temp1.dat temp2.​​dat

这是我的需要,需要比较以下两个 dat 文件中的前两个字段,并按预期在 file3 中合并结果(第一个字段,第二个字段,temp1.dat 的 3 个字段,temp2.​​dat 的 3 个字段)

文件 1:temp1.dat

A, AB,100
B,BB,200
C,CC,300

文件 2:temp2.​​dat

A,AB,10
C,CC,30
D,DF, 4

文件3:输出

A, AB,100,10
C,CC,300,30
4

2 回答 2

3

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= 两个文件的总行数。
  • 所以在上面的语句之后,一个关联数组,索引为 as $1$2,值为$3
  • 现在($1$2 in a && $3=$3","a[$1$2]) 执行 for FNR!=NR.where ,它检查索引 $1$2 是否作为数组中的索引存在,然后第二个条件是将 file1 的第三个字段更改为,$3=$3","a[$1$2]因此现在$0包含更改了其中第三个字段的 common( $1$2) 行。

也必须为四个文件编写类似的逻辑。

于 2012-08-29T09:49:24.273 回答
1

尝试:

awk -F, '{i=$1 SUBSEP $2} NR==FNR{A[i]=$3; next} i in A{print $0,A[i]}' file2 file1
于 2013-03-04T15:40:39.653 回答