2017-02-28 39 views
-2

我想使用awk来编辑文件,但我不能设法做到这一点,而无需创建中间文件。如何使用awk替换列(匹配模式)?

Basicaly我想使用file2和file3等第1列进行搜索,并替换第2列以匹配第1列行。 (请注意,文件2和文件3可能含有其他的东西)

FILE1.TXT

aaa 111 
aaa 222 
bbb 333 
bbb 444 

FILE2.TXT

zzz zzz 
aaa 999 
zzz zzz 
aaa 888 

File3.txt

bbb 000 
bbb 001 
yyy yyy 
yyy yyy 

所需输出

aaa 999 
aaa 888 
bbb 000 
bbb 001 
+0

通常情况下,您可以使用'<(cat File2.txt File3.txt)''来避免中间文件。 'awk'在这里更好,然后像'grep -Ff <(sed's/\([^] * \)。*/^ \ 1 /'File1.txt)<(File File2.txt File3。 txt)'(只是为了显示如何避免中间文件)。 –

回答

2

这就是你指定的,但我想有很多边缘案例没有涉及。

$ awk 'NR==FNR{a[$1]; next} $1 in a' file{1..3} 

aaa 999 
aaa 888 
bbb 000 
bbb 001