特定の条件でファイルから行を抽出する方法

特定の条件でファイルから行を抽出する方法

文書:

chromosome  position  ref  alt 
chr1          1398     A    T 
chr1          2980     A    C 
chr2          3323     C    T,A
chr2          3749     T    G
chr3          5251     C    T,G
chr3          9990     G    C,T
chr4          10345    T    G 

列4にカンマ区切り文字が2つ以上ある場合は、行全体を抽出する必要があります。

予想される出力は次のとおりです。

chr2          3323     C    T,A
chr3          5251     C    T,G
chr3          9990     G    C,T 

ベストアンサー1

この問題を見るにはいくつかの方法があります。

方法1

カンマで区切られた文字が 2 つ以上含まれている行にのみ興味があるので、grepカンマを使用するだけです。

$ grep "," sample.txt 
chr2          3323     C    T,A
chr3          5251     C    T,G
chr3          9990     G    C,T

方法#2

利用可能なgrepPCREツール。ここでは、grepマッチングのためにPerlの正規表現エンジンを使用できます。これは非常に強力で、Perlでできることをたくさんすることができますgrep

緩く定義された

$ grep -P "(\w,)+" sample.txt 

厳格な定義

$ grep -P '\w+\d\s+\d+\s+\w\s+(\w,)+' sample.txt 

方法#3

使用awk。これはコンマ()がある行だけが意味があるという事実を再利用するので、その,行を見つけて印刷します。

緩く定義された

$ awk '/,/{print}' sample.txt 

より厳格な定義

$ awk '/([[:alpha:]])+,[[:alpha:]]/{print}' sample.txt 

より厳格な定義

$ awk '$4 ~ /([[:alpha:]])+,[[:alpha:]]/{print}' sample.txt

このコマンドは、4番目の列の内容を見て、文字、カンマ、または別の文字であることを確認します。

より厳格な定義

$ awk '$4 ~ /([GATC])+,[GATC]/{print}' sample.txt 

これはG、A、T、またはCのみを探し、その後にカンマが続き、別のG、A、T、またはCが続きます。

おすすめ記事