AWK 比较两个文件

AWK 比较两个文件

我学 AWK 没多久,还是很困惑。我尝试使用 AWK 比较两个 txt 文件并根据比较结果生成合并输出。

文件1.txt

budi
andi

文件2.txt

sinta Sep 29 17:12
andi Sep 15 17:12
kuro Sep 9 17:12
budi Sep 2 17:13

我尝试使用

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt`

这是结果

budi
andi

我想要这样的输出

budi Sep 2 17:13
andi Sep 15 17:12

请需要您的建议。谢谢。

抱歉补充指出

file1.txt = coba.txt
file2.txt = cobafull.txt

答案1

如果文件file1.txt被接受coba.txtfile2.txtcobafull.txt

awk 'NR == FNR {A[$1]=$0; next}; {print A[$0]}' coba{full,}.txt

输出:

budi Sep 2 17:13
andi Sep 15 17:12

如果输出的顺序不重要:

awk 'A[$1]++' coba{,full}.txt

输出:

andi Sep 15 17:12
budi Sep 2 17:13

答案2

假设file1.txtfile2.txt你分别表示coba.txtcobafull.txt,并且后者是“更宽”的文件,那么当你这样做时:

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt

那么发生的事情是您首先读取“完整”文件。当它读到第一行时,awk看到这条记录:

sinta Sep 29 17:12

然后它设置a["sinta"]等于"siinta",并停止处理该记录。然后它相应地读入文件的其余部分。

然后,它开始读取第二个文件。它读取第一行,并看到以下记录:

sinta

然后检查"sinta"数组中是否存在该索引a。它确实如此,因此它打印了记录,此时的记录很简单:

sinta

如果您交换参数列表中文件的顺序,它将按照您的预期工作。

相关内容