열 선택

열 선택

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

관련 정보