2016-09-22 112 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