ファイルからコンマの後にカンマと文字列を削除するには?

ファイルからコンマの後にカンマと文字列を削除するには?

次のように、10000行と17列のファイルがあります。

Chr17 43633894  0.5 3.0103  2386    14.9269 6.85401 41.0732 42.8984 953 80848   9.41879 24.1244 26  11.961  87.4669 random1_1000
Chr17 45194841  0.401235    16.7362 2626    4.75178 3.2041  58.5842 59.7521 3534    93081   3.2038  59.9018 52  54.6311 3.08007 random1_1000

一部の列の一部の行には、次の行(たとえば、3番目と4番目の列)のように、カンマ「、」で区切られた値の代わりに2つの値があります。

Chr11 38465225  0.523952,0.5    4.67466,3.0103  2662    4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408    92146   73.8888,21.1059 46.0485 62,1    4.06441,3.0103  3.8106  MAP_outliers

私のファイルからこれらのコンマをすべて見つけて、コンマとそれに続く値を削除して、次のような出力を取得したいと思います。

Chr11 38465225    0.523952    4.67466  2662    4.06441 6.21149 53.0049 58.8243 7269    92146   73.8888 46.0485 62    4.06441  3.8106  MAP_outliers

どうすればいいのかご存知ですか?

答え1

使用sed

sed 's/,[^[:blank:]]*//g' infile

空白以外のすべての項目に一致するすべての項目が続くカンマを削除します。

答え2

そしてawk

awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1'
  • for (i=1; i<=NF; ++i)フィールド番号の繰り返し

  • {gsub(",[0-9].*", "", $i)}カンマの後のすべての項目を数字に置き換え、すべての項目をnullに置き換えます。これは内部作業です。

例:

% awk '{for (i=1; i<=NF; ++i) {gsub(",[0-9].*", "", $i)}}; 1' <<<'Chr11 38465225  0.523952,0.5    4.67466,3.0103  2662    4.06441,3.73412 6.21149 53.0049,55.4167 58.8243 7269,408    92146   73.8888,21.1059 46.0485 62,1    4.06441,3.0103  3.8106  MAP_outliers'
Chr11 38465225 0.523952 4.67466 2662 4.06441 6.21149 53.0049 58.8243 7269 92146 73.8888 46.0485 62 4.06441 3.8106 MAP_outliers

関連情報