【问题标题】:Linux - putting lines that contain a string at a specific column in a new fileLinux - 将包含字符串的行放在新文件的特定列中
【发布时间】:2016-11-06 01:11:14
【问题描述】:

我想从 linux 中的文本文件中提取所有行,这些行在特定列(第 4 列)中包含特定数字(在本例中为 9913)。这是一个制表符分隔的文件,所以我称它为列,虽然我不确定它是否是。

在某些情况下,第 4 列中只有一个数字,但在其他行中,此列中有多个数字(例如 9913;4444;5555)。我想获取数字 9913 出现在第 4 列中的任何行(无论它是否是唯一的数字或在列表中)。如何将所有包含数字 9913 的行放在第 4 列中,并将它们放在自己的文件中?

这是我尝试过的一个示例:

猫文件.txt | grep 9913 > newFile.txt

结果是以下几种的混合:

CDR1as CDR1as ENST00000003100.8 9913 AAA-GGCAGCAAGGGACUAAAA(我想要的文件)

CDR1as CDR1as ENST00000399139.1 9606 GUCCCCA................(文件前。我不想要)

调用特定列时我没有得到任何结果。由下面的助手显示,代码无法识别我认为的列,并且在使用 awk 时得到空白文件。

awk '$4 == "9913"' file.txt > newfile.txt

不会让我将数据传输到新文件。

谢谢

【问题讨论】:

  • 显示你到目前为止所尝试的。
  • 您是否也希望选择第二种情况(例如 9913;4444;5555)?另外你的字段分隔符是什么?
  • 是的,我刚刚编辑了上面的对话以更清楚一点。我希望将这两种情况都包括在内以供选择。

标签: linux awk


【解决方案1】:

这是一种方法

awk '$4 == "9913" {print $0}' file.txt > newfile.txt

或者只是

awk '$4 == "9913"' file.txt > newfile.txt

【讨论】:

  • 注意{print $0}在这里是多余的,因为它是awk的默认行为。所以awk '$4 == "9913"' file 就足够了。
  • 谢谢。我刚刚在上面编辑。出于某种原因,这不适用于我的数据,尽管我在其他帖子中也看到过。使用 awk 时,我没有将任何行传输到新文件
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多