在单独的文件中匹配数据

时间:2013-12-13 10:07:44

标签: awk

我似乎有几个这类问题,并且真的试图在我自己的基础上解决这个问题而没有成功。

我有两个数据文件;我想比较它们的第一个字段,并从输出文件中第一个文件的匹配条目旁边的第二个文件中打印该行。保持文件1中的列表顺序很重要,包括没有匹配的行。这些文件是制表符分隔的值,但我可以根据需要更改它们(尽管数据中使用了逗号)。

FILE1.TXT

37600
39219
32887
01262
69241
00361
34180
42385
69245

FILE2.TXT

37600       GEAR PUMP   1
32887       MOTOR, 480V 1
34180       BRACKET 2
00361       WASHER  4
42385       SCREW       8

所需的输出文件

37600       GEAR PUMP   1
39219
32887       MOTOR, 480V 1
01262
69241
00361       WASHER  4
34180       BRACKET 2
42385       SCREW       8
69245

这是我迄今为止的最大努力,但它会导致一个空文件。

awk NR==NFR{a[$1];next}$1 in a {print $0} file1.txt file2.txt > outfile.txt

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

你很接近,awk应该这样做。

awk 'FNR==NR {a[$1]=$0;next} a[$0] {$0=a[$0]}1' file2 file1
37600       GEAR PUMP   1
39219
32887       MOTOR, 480V 1
01262
69241
00361       WASHER  4
34180       BRACKET 2
42385       SCREW       8
69245

我将file2存储在数组中,$1作为索引 如果在数组中找到file1中的值,请将其设置为$0并全部打印出来。


您也可以写这个,以标记应该比较的列#1

awk 'FNR==NR {a[$1]=$0;next} a[$1] {$0=a[$1]}1' file2 file1

答案 1 :(得分:2)

使用join

join -1 2 -2 1 -a1 <(cat -n file1.txt | sort -k2,2) <(sort file2.txt) | sort -k2 | cut --complement -d" " -f2

37600 GEAR PUMP 1
39219
32887 MOTOR, 480V 1
01262
69241
00361 WASHER 4
34180 BRACKET 2
42385 SCREW 8
69245

根据@ devnul的建议,谢谢。