awk if 명령은 19열만 인쇄할 수 있는데, 두 개의 열을 인쇄하려면 어떻게 해야 합니까?

awk if 명령은 19열만 인쇄할 수 있는데, 두 개의 열을 인쇄하려면 어떻게 해야 합니까?

열 3과 열 4를 인쇄하고 싶지만 헤더 빈 열 행은 인쇄하지 않습니다.

header
tap
norm 
X Y       880 1787
X Y       3253 3439

이것을 인쇄하여 awk '{print($3,$4)}'제공됨

(BLANK lines from header rows)
880 1787
3253 3439

이것은 열 19를 인쇄하는 데에만 작동하지만 두 열을 모두 인쇄하려면 어떻게 해야 합니까?

awk  '$3{print $3}' 
880
3253

나는 col3 col4를 원한다

880 1787
3253 3439

시도했지만 3열만 인쇄되었습니다.

awk '$3{print $3}''$4{print $4}' 
880
1787
3253
3439

답변1

머리의 길이가 얼마나 되는지 아십니까(세 줄):

awk 'NR > 3 { print $3, $4 }'

NR지금까지 읽은 레코드 수입니다(기본값은 행 수). 네 번째 줄과 모든 후속 줄에서 명령문을 NR > 3트리거합니다 .print

할 수 있다사용

awk '$3 { print $3, $4 }'

$3그러나 이것은 존재 여부뿐만 아니라 0이 아닌지 여부에 따라 달라지기 때문에 약간 취약합니다 (세 번째 열의 0은 해당 행에 대한 출력을 제공하지 않습니다).

답변2

만약에

header
tap
norm
X Y 880 1787
X Y 3253 3439

그 다음에

awk '{print $3 " " $4}' | sed '/^ *$/d'

만들다

880 1787
3253 3439

마지막 부분에서는 시도해 볼 수 있습니다.

 awk '{print $3 " " $4 " " $19}'

열 3, 4, 19를 인쇄합니다.

관련 정보