首页 > 解决方案 > 涉及awk的一行代码分解

问题描述

我目前正在开展一个项目,该项目涉及比较来自两个不同文件的数据。我一直在寻找一个命令,它将 file1 的每一行与 file2 的每一行进行比较,如果匹配则打印出“1”,如果不匹配则打印出“0”。然后,它将针对 file1 的每一行对 file1 的第二行重复此命令。

我在网上找到了这段似乎适用于我的项目的代码,但我希望有人能帮助我分解它并提供更多解释。

awk 'FNR==NR{a[$1]; next} {print $1, ($1 in a) ? "1":"0"}' file1.txt file2.txt

此外,我对此并不陌生,因此任何可以指导我回答的资源都会非常有帮助。谢谢你。

标签: awk

解决方案


在此处重复以供参考,以防问题被编辑:

awk 'FNR==NR{a[$1]; next} {print $1, ($1 in a) ? "1":"0"}' file1.txt file2.txt

您应该首先阅读基本的 awk 入门。基本上,该子句FNR==NR是检查我们是否正在读取第一个文件的常用习语。NR 是总记录号(行号),而 FNR 是当前文件中的记录号,因此当它们相等时,您仍在处理第一个文件。然后该操作将第一列(不是整行)存储到一个数组中。所以这个程序做的第一件事就是将第一个文件的第一列读入名为a. 然后它开始读取第二个文件,并打印每一行的第一列,然后是“1”或“0”,具体取决于第一列中的值是否在数组中。


推荐阅读