2016-09-22 86 views
-1

我有一个文件log.txt,其格式如下所示。从文件第二列中删除0.0

log.txt的

280,249.999441 
140,0.0 
140,0.0 
84917,182.59465 
140,0.0 
72161,185.615882 
304,249.998589 
280,240.184619 

我想删除所有在第二列0.0项。

预期输出:

280,249.999441 
84917,182.59465 
72161,185.615882 
304,249.998589 
280,240.184619 

我想要做上述的简单和最快的方式。我对所有工具都开放。

感谢

回答

2

您可以使用AWK:

awk -F, '$2 != "0.0"' log.txt 

280,249.999441 
84917,182.59465 
72161,185.615882 
304,249.998589 
280,240.184619 

-F,组输入字段分隔符为逗号和$2 != "0.0"检查第2列不0.0

0

的命令行的解决方案:

grep -v '0\.0$' log.txt 
+0

不检查,如果它是第2列,虽然匹配,将需要像'grep -v'^ [^,] *,0 \ .0 $'' – Sundeep

+0

它确实检查。试试:'echo“0.0,42”| grep -v'0 \ .0 $'' – languitar

+1

如果在第二列出现'0.0'时有3列,那该怎么办?我的建议应该是'grep -vE'^ [^,] *,0 \ .0(,| $)'' – Sundeep

0

fileinput模块将有助于重新写就地文件。

import sys 
import fileinput 

for i, line in enumerate(fileinput.input('xyz.txt', inplace=1)): 
    if '0.0' in line: 
     sys.stdout.write(line.replace(line, '')) 
    else: 
     sys.stdout.write(line) 

内容xyz.txt将该的:

280,249.999441 
84917,182.59465 
72161,185.615882 
304,249.998589 
280,240.184619 
1

这可能为你工作(GNU SED):

sed '/^[^,]*,0\.0$/d' file 
+1

需要转义。否则,像030这样的第二列数据也会被删除 – Sundeep

0

perl

$ perl -F, -lane 'print if $F[1] ne "0.0"' log.txt 
280,249.999441 
84917,182.59465 
72161,185.615882 
304,249.998589 
280,240.184619 
    ,
  • -F,拆分输入线并保存到@F阵列
  • 然后打印线,其中第二个元素不串0.0