A, B, D, E 열의 값 중 하나 이상이 0이 아닌 행을 수집해야 합니다.
다음은 데이터입니다:
A B C D E G
ES-N . | 0 0 12 | 0 0 100
SES-N . | 1 0 10 | 0 0 10
UAS-N . | 0 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10
BBE-N . | 0 0 15 | 0 0 125
원하는 출력:
A B C D E G
SES-N . | 1 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10
Unix 플랫폼에서 실행할 수 있는 쉘 스크립트를 제공하십시오.
다음을 수행했지만 C 열과 G 열로 인해 "0"이 제거되지 않았습니다.
#lin is the count of line in the file
for (( i=1; i<=$lin; i++ ));
do
sed -n -e ""$((ini + 1)),$fin"p" /file
egrep '1|2|3|4|5|6|7|8|9' /file1
if [[ $? -eq 0 ]]
then
sed -n -e ""$ini"p" /file
답변1
awk를 사용하세요:
awk -n '$4 !=0 || $5 != 0 || $8 != 0 || $9 != 0 {print $0}' filename
답변2
간단하게 다음과 같이 할 수도 있습니다.
awk '$4+$5+$8+$9' infile
그리고 헤더 행을 유지합니다.
awk 'NR==1 || $4+$5+$8+$9' infile
답변3
@unxnut의 awk
솔루션은 더 유연하지만 특정 경우에는 요구 사항이 간단하고 파일 형식이 간단하므로 이 방법 grep
도 효과가 있을 수 있습니다.
0이 아닌 값이 하나 이상 포함된 행을 포함하는 것은 해당 값이 모두 0인 행을 제외하는 것과 같습니다. 이 grep
명령은 다음 두 가지 인스턴스가 포함된 행을 찾습니다.
- 세로 막대 뒤에 공백이 옵니다.
- 0 다음에 공백이 옴
- 또 다른 0 뒤에 공백이옵니다.
패턴의 두 인스턴스와 일치하는 행(즉, 네 개의 값이 모두 0인 행)은 다음과 같습니다.삭제됨. 남은 줄 표시:
$ egrep -v '(\| *0 *0 .*){2}' infile
A B C D E G
SES-N . | 1 0 10 | 0 0 10
CSS-N . | 0 0 10 | 0 5 10