我有一个标签分隔文件,其中包含> 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脚本进行处理非常耗时。非常感谢您的帮助。
答案 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