2016-09-22 2 views
-1

다음과 같은 형식의 log.txt 파일이 있습니다.파일에서 두 번째 열에서 0.0을 제거합니다.

log.txt는 I 번째 열의 0.0 갖는 모든 엔트리를 제거 할
280,249.999441 
140,0.0 
140,0.0 
84917,182.59465 
140,0.0 
72161,185.615882 
304,249.998589 
280,240.184619 

.

예상 출력 :

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

는 확인하지 않습니다 문자열과 일치하지 않습니다 인쇄 라인은 같은 뭔가가 필요합니다 '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 모듈은 현재 위치에서 파일 쓰기 다시하는 데 도움이 될 것입니다. xyz.txt의

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) 

내용 :

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

이 당신 (GNU이 나오지도)을 위해 일 수 있습니다

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

은'.'을 이스케이프해야합니다. else,'030'과 같은 두 번째 열 데이터도 삭제됩니다. – Sundeep

0

$ 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 
    perl,
  • -F, 분할 입력 라인 및 @F 배열에 저장
  • 그리고 두번째 요소는 비록 2 열에 있다면 0.0
관련 문제