在结肠处拆分每个细胞

时间:2018-01-19 11:38:07

标签: split

我有一个标签分隔文件,其中包含> 1000 列和行。我想在第一个冒号(:)拆分每个单元格并提取值。例如:

示例输入

1   55  ./.:.:. 0|0:36:4    0|0:32:9    0|0:30:4    ./.:.:. ./.:.:. ./.:.:. 0|0:32:7
1   56  ./.:.:. ./.:.:. 0|0:32:9    0|0:30:4    ./.:.:. ./.:.:. ./.:.:. 0|0:32:7

示例输出

1   55  ./. 0|0 0|0 0|0 ./. ./. ./. 0|0
1   56  ./. ./. 0|0 0|0 ./. ./. ./. 0|0

我可以使用python脚本执行此操作:

SHORT_col = ((str(cols[2]).split(':'))[0])

但是我想知道有没有更快的方式来执行此操作,因为调用> 1000 列并使用python脚本进行处理非常耗时。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在我的解释中,您需要从每个字段中删除:anything(正则表达式为:.*)模式。使用awk,您可以通过以下方式实现此目的:

awk '{for (i=1; i<=NF; i++) sub(/:.*/, "", $i); print }' your_data_file

使用for循环,它遍历所有字段,并使用""函数使用空字符串sub重新定义已定义的模式。

<强> 输出

1 55 ./. 0|0 0|0 0|0 ./. ./. ./. 0|0
1 56 ./. ./. 0|0 0|0 ./. ./. ./. 0|0