4

「:」が含まれる任意のフィールドで、「:」という文字が 4 回出現した後に続くものを削除したいと思います。例を参照してください。

入力:

1 10975     A C    1/1:137,105:245:99:1007,102,0   0/1:219,27:248:20:222,0,20 
1 19938     T TA   ./.                             1/1:0,167:167:99:4432,422,0,12,12
12 20043112 C G    1/2:3,5,0:15:92                 2/2:3,15:20:8

期待される出力:

1 10975     A C    1/1:137,105:245:99   0/1:219,27:248:20 
1 19938     T TA   ./.                  1/1:0,167:167:99
12 20043112 C G    1/2:3,5,0:15:92      2/2:3,15:20:8

したがって、基本的に「:」を含むフィールドはすべて削除する必要があります。":" が 3 回しか表示されないため、3 行目は何も変化しないことに注意してください。最初の行でのみ機能し、コンマが多いため、2番目の行では機能しない解決策(良くない)を試して見つけました。

不完全な解決策:

sed 's/:[0-9]*,[0-9]*,[0-9]*//g'

前もって感謝します

4

4 に答える 4

5

セド:

sed -r 's/((:[^: \t]*){3}):[^ \t]*/\1/g' file | column -t

パール:

perl -pe 's/((:\S*){3}):\S*/$1/g' file | column -t
于 2013-11-10T09:18:34.947 に答える
3

使用するsed

sed -r 's/((:[^ ]*){3}):[^ ]*/\1/g' file

出力:

1 10975     A C    1/1:137,105:245:99   0/1:219,27:248:20 
1 19938     T TA   ./.                             1/1:0,167:167:99
12 20043112 C G    1/2:3,5,0:15:92                 2/2:3,15:20:8

使用するperl

perl -pe 's/((:\S*){3}):\S*/$1/g' file
于 2013-11-10T09:05:16.867 に答える
2

フィールド 5 から最後のフィールドまでで、4 番目に出現する正規表現が削除されます。:[^:]+

< file.txt awk '{ for (i=5; i<=NF; i++) $i = gensub(/:[^:]+/, "", 4, $i) }1' | column -t

フィールド 5 から最後のフィールドまで、これにより 4 番目以降のすべてが削除されます。:

< file awk '{ for (i=5; i<=NF; i++) $i = gensub(/((:[^:]+){3}).*/, "\\1", 1, $i) }1' | column -t

説明:

質問を読み直すと、おそらく 2 番目の解決策が探しているものです。最初の解決策は、コロンの後にコロン以外の 1 つ以上の文字が続くものを探し、それらを削除します。の 3 番目の引数gensub()は、置換する正規表現の一致を記述します。したがって、4 はgensub()、パターンの 4 番目の一致を削除するように指示します。2 番目の解決策は、最初の回答で説明されている正規表現の 3 つのセットを探します。この時点で、またはgensub()を使用して利用できない追加機能を提供するに言及する価値があります。これは、他の言語が括弧を使用してキャプチャを実行する方法と同様に、置換テキストで正規表現のコンポーネントを指定する機能です。は、GNU awk を使用してのみ使用できる非常に強力なコマンドです。提供される説明と例sub()gsub()gensub()ここは非常に便利です。HTH。

結果:

1   10975     A  C   1/1:137,105:245:99  0/1:219,27:248:20
1   19938     T  TA  ./.                 1/1:0,167:167:99
12  20043112  C  G   1/2:3,5,0:15:92     2/2:3,15:20:8
于 2013-11-10T08:43:30.497 に答える