如何删除文件中逗号和逗号后的字符串?

如何删除文件中逗号和逗号后的字符串?

我有一个包含 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

在某些列的某些行中,我有 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

相关内容