我有一个以制表符分隔的列式.txt文件,格式为:
61200 285700 22000
61600 294000 22300
64400 385200 22500
66100 427600 24000
70700 478500 24400
72300 0 24700
72700 0 24800
78600 0 25200
79900 0 25300
83600 0 26100
84700 0 26300
86900 0 26600
88300 0 27000
91000 0 27200
91900 0 27400
92700 0 27500
我想找到所有“0”值(不包括尾随零)并删除它们,或用空格替换它们。
期望的输出:
61200 285700 22000
61600 294000 22300
64400 385200 22500
66100 427600 24000
70700 478500 24400
72300 24700
72700 24800
78600 25200
79900 25300
83600 26100
84700 26300
86900 26600
88300 27000
91000 27200
91900 27400
92700 27500
这种可以扩展的最有效方法是什么?我将批量处理大量的.txt文件 - 每个文件都是> 50Mb。
答案 0 :(得分:4)
简单,在\b
之前和之后使用字边界0
。 \b
匹配单词字符和非单词字符(反之亦然)。
perl -pe 's/\b0\b/ /g' file
添加-i
参数以进行就地编辑。
perl -i -pe 's/\b0\b/ /g' file
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您有一个庞大的文件列表要批处理,这样会更有效:
perl -pe 's/\t0\t/\t \t/' blah
我认为因为perl正在寻找所有的边界字符,而不仅仅是标签。
marshall@marshall-desktop:~$ ls -lh blah && time perl -pe 's/\b0\b/ /' blah >/dev/null && time perl -pe 's/\t0\t/\t \t/' blah >/dev/null
-rw-r--r-- 1 marshall marshall 53M Aug 9 22:03 blah
real 0m4.077s
user 0m4.048s
sys 0m0.028s
real 0m2.765s
user 0m2.752s
sys 0m0.012s