awk - 涉及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 'FNR==NR{a[$1]; next} {print $1, ($1 in a) ? "1":"0"}' file1.txt file2.txt
您应该首先阅读基本的 awk 入门。基本上,该子句FNR==NR
是检查我们是否正在读取第一个文件的常用习语。NR 是总记录号(行号),而 FNR 是当前文件中的记录号,因此当它们相等时,您仍在处理第一个文件。然后该操作将第一列(不是整行)存储到一个数组中。所以这个程序做的第一件事就是将第一个文件的第一列读入名为a
. 然后它开始读取第二个文件,并打印每一行的第一列,然后是“1”或“0”,具体取决于第一列中的值是否在数组中。
推荐阅读
- c# - 基于用户多选对列表框中的项目进行分组
- elasticsearch - 弹性索引映射别名在 kibana 中显示为空
- html - 如何在github上的markdown中显示af pdf图像
- jupyter-notebook - empty cells and alignment in markdown tables in Jupyter Notebooks
- c# - SMTP mail : How to bind data table values to a html template C#
- activemq - 如何正确测试 ActiveMQ 主题发布
- openrefine - OpenRefine JSON Templating skip null values
- c - 使用宏初始化结构
- impala - 在 impala 中插入覆盖后我需要做计算统计吗
- geoserver - Geoserver WMS pre-render