![如何删除文件中逗号和逗号后的字符串?](https://linux22.com/image/129895/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E4%B8%AD%E9%80%97%E5%8F%B7%E5%92%8C%E9%80%97%E5%8F%B7%E5%90%8E%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9F.png)
我有一个包含 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