헤더가 있는 조건에 따른 awk 열

헤더가 있는 조건에 따른 awk 열

아래와 같은 텍스트 파일이 있습니다.

variable1  
10 20 30  
40 50 60

variable2  
2 4 40  
3 2 1

variable3   
2 4 2  
3 2 1

col3>20인 경우 출력은 아래 헤더(변수1/2) 값과 유사해야 합니다.

variable1  
10 20 30  
40 50 60  

variable2  
2 4 40  

일치하는 항목이 없으면 아무 것도 인쇄되지 않으며 헤더도 인쇄되어서는 안 됩니다.

답변1

요구 사항에 대한 나의 해석을 바탕으로

 awk 'NF==1 { head=$0; printed=0; }
      NF==3 && $3>20 { 
          if(!printed) {
              printed=1;
              if(firstdone)print ""; else firstdone=1;
              print head
          }
          print
      }' inputfile

또는 더 짧은 변형

awk 'NF==1 { head=$0; printed=0; }
     NF==3 && $3>20 {
         if(!printed++) {
             if(firstdone++)print "";
             print head
         };
         print
     }' inputfile
awk 'NF==1 { head=$0; }
     NF==3 && $3>20 {
         if(head) {
             if(firstdone++)print "";
             print head;
             head=""
         };
         print
     }' inputfile

입력이 있습니다

variable1
10 20 30
40 50 60

variable2
2 4 40
3 2 1

variable3
10 10 10
5 5 5

variable4
1 1 1
2 2 21
3 3 3

출력은 다음과 같습니다

variable1
10 20 30
40 50 60

variable2
2 4 40

variable4
2 2 21

답변2

귀하의 요구 사항에 대한 한 가지 설명을 바탕으로:

awk '(NF<3) || ($3 > 20)' file

답변3

수정된 입력을 기반으로:

awk 'NF<=1 || (NF==3 && $3>20)' input

비어 있거나, 한 단어만 포함하거나(=제목 줄), 세 개의 필드(세 번째 필드가 20보다 큼)를 포함하는 경우 행이 인쇄됩니다.

편집하다질문에 대한 마지막 편집으로 인해 이 답변이 더 이상 사용되지 않습니다. 인용하다@博多의 답변awk귀하의 요구 사항을 충족하는 기반 솔루션을 찾으십시오 .

관련 정보