当前位置: 首页 > 知识库问答 >
问题:

这个带有两个文件的AWK关联数组是如何工作的?

慕容渊
2023-03-14

我写这封信的目的是要求解释这个简短的AWK命令的一些元素,我用它打印测试文件_long中的字段。与输入测试文件_short中的字段匹配的txt。txt。代码运行得很好——我只是想确切地知道程序在做什么,因为我对编程非常陌生,我希望能够对未来需要编写的命令进行思考。下面是一个例子:

$ cat test-file_long.txt 
2 41647 41647 A G
2 45895 45895 A G
2 45953 45953 T C
2 224919 224919 A G
2 230055 230055 C G
2 233239 233239 A G
2 234130 234130 T G

$ cat test-file_short.txt 
2 41647 41647 A G
2 45895 45895 A G
2 FALSE 224919 A G
2 233239 233239 A G
2 234130 234130 T G

$ awk 'NR==FNR{a[$2];next}$2 in a{print $0,FNR}' test-file_short.txt test-file_long.txt 
2 41647 41647 A G 1
2 45895 45895 A G 2
2 233239 233239 A G 6
2 234130 234130 T G 7

这是一个非常简单的匹配问题,几周前我在这个网站上找到了命令。我的问题是1)NR==FNR到底是做什么的?我知道它分别代表记录数=当前输入文件的记录数,但是为什么代码需要这样操作呢?当我从命令中删除这个时,结果与粘贴test-file_long.txttest-file_short.txt相同。2)对于2美元的,AWK是否会自动从文件2中读取字段2作为这里语法的一部分?3)我只是想确认; Next只是意味着跳过所有其他块并转到下一行?换句话说,代码首先对每一行执行a[2美元],然后返回并对每一行执行其他块?当我删除; Next时,我仍然得到过滤后的输出,但只跟踪test-file_short.txt的完整打印输出。

感谢所有的投入,我的目标只是更好地理解AWK是如何工作的,因为它对我目前的工作(处理大型基因组数据集)非常有用。

共有1个答案

司空均
2023-03-14

以下是一些与您的代码相关的信息:

>

对于下一个代码,<2>将只在代码中执行。由于这条next语句,对于文件号1,将永远不会达到第二条规则。

 类似资料:
  • 问题内容: 文件1具有5个字段ABCDE,其中字段A是整数 文件2具有3个字段AFG 文件1中的行数比文件2中的行数大得多(20 ^ 6到5000) 文件1中A的所有条目都出现在文件2中的A字段中 我喜欢按字段A合并两个文件并携带F和G 所需的输出是ABCDEFG 例 文件1 文件2 所需的输出 问题答案: $ awk ‘FNR==NR{a[$1]=$2 FS $3;next}{ print $0

  • 这是来自SQLZOO.NET的问题

  • 我试图了解mysql查询在GROUP BY和不使用GROUP BY的情况下是如何工作的。 假设我有一个FILM_ACTORS表,其中每个ACTOR_ID都有一个相应的film_id。于是同一个演员参演了N部不同的电影。 我想选出参与20部电影的演员: 这个查询起作用,并返回参与20部电影的actor_id。但如果我只是: 为什么该查询仅在我将其等于film_actor表(5463)的大小时才返回值

  • Kotlin定义了自己的类: 该类的实例是通过中定义的内联函数构造的: null 我认为在编译之前必须进行某种代码预处理。 请随意用一个更贴切的标题编辑这个问题。

  • 我正在为Spring Core认证学习,对于使用Java配置方式配置Bean的相关练习,我有以下疑问。 Java配置的正确解释是Spring吗? 例如,我可以说RewardNetwork是声明的bean,而RewardNetworkImpl是这个bean的当前实现吗? 所有的3Beans(AccountRepository,RestaurantRepository和RewardRepository

  • 问题内容: 我需要一个将所有元​​素组合在一起的新数组,即 做这个的最好方式是什么? 对不起,我忘了,这些ID永远不会匹配,但是从技术上讲,这些名称可能会出现,但不可能出现,它们都必须列在一个数组中。我查看了array_merge,但不确定这是否是最佳方法。另外,您将如何对此进行单元测试? 问题答案: 效率更高,但有两种选择: