文書:
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
利用可能なgrep
PCREツール。ここでは、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が続きます。