【问题标题】:Extract lines with multiple patterns occuring in one column using awk使用 awk 提取在一列中出现多个模式的行
【发布时间】:2016-06-02 14:07:00
【问题描述】:

我有一个包含遗传数据的非常大的文本文件(94,807,000 行)。我想提取特定列中出现特定模式的行。我尝试以各种方式使用 awk 和 grep,但没有找到完成工作的方法。该文件以空格分隔,如下所示:

   V1     V2 V3 V4   V5      V6
1: 10 179406  T  . HPGM T,T,T,T
2: 10 179407  T  . HPGM T,T,T,T
3: 10 179408  G  . HPGM G,G,G,G
4: 10 179409  A  . HPGM A,A,A,A
5: 10 179410  A  . HPGM A,A,A,A
6: 10 179411  T  . HPGM T,T,T,T

V5 和 V6 可以有比这里显示的四个条目更多的条目,所有内容可能看起来很奇怪,例如:

   V1        V2 V3 V4   V5                    V6
1:  1 158154514  A  . HPGO A,AAAA..204..TTTT,A,A

我想保留 H 和 P 的 both 条目(V6 中的前两个逗号分隔字符)恰好是 A, C、T 或 G,所以应该只有这四个字符之一。但是,H 和 P 不必具有相同的字符。在V5 中可以出现多个组合,但都以HP 开头。我不感兴趣之后是否有任何条目或有多少条目,并且所有行确实有 H 和 P 条目,因此我不必处理丢失的条目。

我找到了一些答案,这些答案显示了如何使用逻辑或 || 搜索多个模式。 ,其中一些显示如何使用$6 ~ '/A,.' 在特定字段中查找,以及如何使用== "pattern" 查找精确匹配项。但是,我没有找到组合这些东西的答案,也无法自己弄清楚。非常感谢您的帮助。

【问题讨论】:

  • 您认为什么是“H 和 P 的条目”。 V5 看起来像 HPGMHPGO 是否被视为“H 和 P 的条目”?如何判断这些 H 和 P 条目是 A、C、T 还是 G?就像 V6 中的所有值都不能包含 A、C、T 或 G 值以外的任何值?我认为这个逻辑对你来说非常有意义,但它并没有以不熟悉这个基因数据文件的人能够理解的方式来解释。
  • 抱歉不清楚。 H 和 P 的条目是 V6 列中的前两个字符。在大写(6 行)中,一切看起来都很好。但是,在小写字母(1 行)中,P 的条目是 AAAA..204..TTTT - 这些行应该被排除在外。在V5 中可以出现多种组合,但都以HP 开头。最后,所有行看起来应该有点像上面的 6 行。我只想排除包含有趣内容的行,例如AAAA..204..TTTT。更一般地说,V6 中的前两个逗号分隔位置应该有 恰好一个字符,即 A、C、T 或 G。

标签: bash awk grep


【解决方案1】:

你可以使用这个 awk 命令:

awk 'split($NF, a, /,/) && a[1] a[2] ~ /^[ACTG]{2}$/' file

1: 10 179406  T  . HPGM T,T,T,T
2: 10 179407  T  . HPGM T,T,T,T
3: 10 179408  G  . HPGM G,G,G,G
4: 10 179409  A  . HPGM A,A,A,A
5: 10 179410  A  . HPGM A,A,A,A
6: 10 179411  T  . HPGM T,T,T,T
  • split($NF, a, /,/) 用逗号分割最后一列
  • a[1] a[2] ~ /^[ACTG]{2}$/ 正在使用正则表达式来确保拆分后的第一个和第二个子字段是 A or C or T or G 之一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多