ヘッダーがある条件に基づく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

あなたの要件の1つの説明に基づいて:

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

答え3

修正された入力に基づいて:

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

空の場合、1つの単語のみ(=タイトル行)、3つのフィールド(3番目のフィールドが20より大きい)を含む場合は、行が印刷されます。

編集する質問の最後の編集のため、この回答は廃止されました。引用する@博多の答えawkあなたの要件を満たすベースソリューションを見つけてください。

関連情報