작은 코드 변경 후 "awk"는 제목과 빈 줄을 인쇄합니다(제목 반복 없음).

작은 코드 변경 후 "awk"는 제목과 빈 줄을 인쇄합니다(제목 반복 없음).

data-file콘텐츠:

             k = 0.1667 0.0962 0.0000 (  4922 PWs)   bands (ev):

-7.1689  -7.1043  -6.1682  -6.0658   1.1309   1.5196   3.0894   3.1087
 3.3846   3.7588   4.2143   4.2220   4.3882   4.4011   5.1222   5.6229
 5.9506   6.2078   8.4442   8.8100   8.8150   8.8529   8.9070   9.0070
 9.5911   9.6311  13.5626  14.3720  15.0169  15.2435 
  end1
  end2
  end3

awk이 데이터에 대해 두 가지 명령을 시도했습니다 ...

1.

awk -F'=' '/[[:blank:]]k/{w=w""$2}; { print w}' data-file

산출:

     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :
     0.1667 0.0962 0.0000             matrix :

2.

awk -F'=' '/[[:blank:]]k/{w=w""$2}; { print w;w=""}' data-file

산출:

0.1667 0.0962 0.0000 (  4922 PWs)   bands (ev):











(Eight newlines are printed after that.)

두 번째 명령을 사용하면 검색된 패턴이 한 번만 인쇄되지만 빈 줄이 더 많이 표시됩니다. 그러나 첫 번째 명령은 패턴을 9번 인쇄합니다. 명령의 차이점은 무엇입니까 awk? 더 많이 인쇄하는 이유, 빈 줄을 인쇄하는 이유는 무엇입니까? 이러한 빈 줄의 인쇄를 어떻게 억제할 수 있습니까?

답변1

왜 더 많이 인쇄되나요?

스크립트 awk에는 모드가 없는 작업이 있습니다. 즉, 각 입력 줄에 대해 실행됩니다. 여러번 검색된 패턴을 인쇄하고 싶지 않다면그러지 마세요.

빈 줄을 인쇄하는 이유

인쇄 w한 다음 설정하기 때문입니다 w="". 그런 다음 w각 입력 행에 대해 다시 인쇄하십시오.

이런 막연한 질문 때문에 명확하게 설명하기는 어렵지만,추측하다당신은 이것을하고 싶습니다 :

awk -F'=' '/[[:blank:]]k/{ print $2 }' data-file

답변2

{print w;w=""}비어 있지 않은 줄만 인쇄 하려면 w무언가를 포함하는 {print...}조건으로 수행 해야 합니다.w

편리하게도 awk빈 문자열은 다음과 같이 처리되고 false비어 있지 않은 모든 문자열은 true("진실과 거짓 awk"). 따라서 w패턴으로 추가하여 원하는 것을 얻을 수 있습니다.

awk -F'=' '/[[:blank:]]k/{w=w""$2}; w { print w;w=""}'

관련 정보