簡體   English   中英

使用awk提取在一列中出現的具有多種模式的行

[英]Extract lines with multiple patterns occuring in one column using awk

我有一個很大的帶有遺傳數據的文本文件(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的兩個條目(它們是V6中的前兩個逗號分隔字符) 正好是A,C,T或G,因此應僅包含這四個字符之一。 但是,H和P不必具有相同的字符。 V5可能會出現多種組合,但是所有組合都始於HP 我不關心之后是否有任何條目或有多少條目,並且所有行的確都有 H和P條目,因此我不必處理丟失的條目。

我找到了一些答案,這些答案顯示了如何使用邏輯或||搜索多種模式。 ,其中一些顯示使用$6 ~ '/A,.'在特定字段中的外觀$6 ~ '/A,.' 以及如何使用== "pattern"查找精確匹配。 但是,我沒有找到將這些東西結合起來的答案,也無法自己解決。 幫助將不勝感激。

您可以使用以下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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM