[英]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.