我学 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.txt
为file2.txt
:cobafull.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.txt
和file2.txt
你分别表示coba.txt
和cobafull.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
如果您交换参数列表中文件的顺序,它将按照您的预期工作。