1

当两个文件中的两个第一列匹配并用第二个文件列替换第一个文件值时,我如何合并两个文件......我的意思是......

相同的列数:

FILE 1:
121212,0100,1.1,1.2,
121212,0200,2.1,2.2,

FILE 2:
121212,0100,3.1,3.2,3.3,
121212,0130,4.1,4.2,4.3,
121212,0200,5.1,5.2,5.3,
121212,0230,6.1,6.2,6.3,

OUTPUT:
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,

换句话说,我需要在匹配时和两个文件中打印$0第二个文件。我理解逻辑,但我无法使用数组来实现它。这显然应该使用。$1$2

请花点时间解释任何代码。

4

2 回答 2

2

用于awk打印模式文件中的前 2 个字段并通过管道进行grep匹配:

$ awk 'BEGIN{OFS=FS=","}{print $1,$2}' file1 | grep -f - file2
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,

-f选项告诉grep从文件中获取模式,但使用-而不是文件名使得grepstdin.

因此,第一个awk脚本产生了file1我们通过管道匹配的模式file2using grep

$ awk 'BEGIN{OFS=FS=","}{print $1,$2}' file1
121212,0100
121212,0200

您可能希望使用以下命令将匹配锚定到行首^

$ awk 'BEGIN{OFS=FS=","}{print "^"$1,$2}' file1 
^121212,0100
^121212,0200

$ awk 'BEGIN{OFS=FS=","}{print "^"$1,$2}' file1 | grep -f - file2
121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,
于 2012-12-31T16:54:48.797 回答
1

这是一种使用方法awk

awk -F, 'FNR==NR { a[$1,$2]; next } ($1,$2) in a' file1 file2

结果:

121212,0100,3.1,3.2,3.3,
121212,0200,5.1,5.2,5.3,
于 2013-01-01T00:14:38.340 回答