아래와 같은 텍스트 파일이 있습니다.
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
귀하의 요구 사항을 충족하는 기반 솔루션을 찾으십시오 .