아래와 같이 파이프로 구분된 파일이 있습니다.
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