以下のテキストファイルがあります。
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
あなたの要件を満たすベースソリューションを見つけてください。