awk를 사용하여 파이프로 구분된 파일의 특정 열에서 0이 아닌 값을 가진 행을 얻는 방법은 무엇입니까?

awk를 사용하여 파이프로 구분된 파일의 특정 열에서 0이 아닌 값을 가진 행을 얻는 방법은 무엇입니까?

아래와 같이 파이프로 구분된 파일이 있습니다.

TEST|RALPH|JACKSON|2|3|1
TEST|STEVE|PARKER|0|1|1
TEST|MARK|WOODS|0|1|1
TEST|DAVE|KNIGHT|1|3|1
TEST|JOHN|DOE|0|1|1

4,5,6열에서 0이 아닌 값이 있는 행을 필터링하여 별도의 파일에 쓰고 싶습니다.

예상 출력

TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1

나는 다음 awk를 사용하여 이것을 달성하려고 노력합니다.

awk -F "|" '$4 != 0 && $5 !=0 && $6 !=0' input.txt > output.txt

awk를 사용하여 이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.

답변1

현재 접근 방식은 정확하고 명확하며 광고한 대로 작동하므로 실제로 변경할 필요가 없습니다.

그러나 더 많은 열을 테스트하려면 다음과 같이 말하세요.모두awk열 3 다음에 열이 있으면 프로그램이 약간 길어질 수 있습니다 (열이 많은 경우).

또 다른 방법은 루프를 사용하는 것입니다.

$ awk -F '|' '{ for (i=4; i<=NF; ++i) if ($i == 0) next; print }' file
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1

프로그램 awk은 열 3 이후의 모든 열의 값을 테스트하고 값이 0인 열이 발견되면 즉시 현재 행을 건너뜁니다. 0이 발견되지 않으면 현재 행이 인쇄됩니다.

답변2

#!/usr/bin/python
import subprocess
k=open('k.txt','r')
for i in k:
    h=i.strip().split('|')
        if "0" not in h[-3:]:
            print "|".join(h)
output

python script.py

TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1

관련 정보