이 awk 명령을 해독하는 데 도움을 주세요

이 awk 명령을 해독하는 데 도움을 주세요

나는 awk 책을 공부하고 있는데 이 예를 얻었지만 무슨 일이 일어나고 있는지에 대한 실제 설명은 없습니다.

awk ' NR%2 {printf "%s,", $0; next;}1 ' < linepairs.csv

문맥상 linepairs.csv는 여러 csv 값이 있는 줄을 포함하는 파일입니다.

a,b,c,d
e,f,g,h
i,j,k,l

등...

이 awk 명령은 행을 함께 연결해야 합니다. 나는 그것들이 동일하다고 NR%2생각하여 변화를 시도했지만 (NR%2==0)반대의 결과를 얻었습니다. 나는 printf가 어떻게 작동하는지 이해하고 있으며 방금 "다음"에 대해 배웠지만 거기에서 정확히 무슨 일이 일어나고 있는지 잘 모르겠습니다. 마지막으로, 마지막 1은 이전에 책에서 언급되지 않았기 때문에 나를 정말 혼란스럽게 했습니다.

누군가가 나를 위해 이 명령을 번역해 줄 수 있다면 좋을 것입니다.

답변1

Awk 프로그램은 규칙으로 구성됩니다 pattern {action}. 평가 결과가 TRUE {action}이면 실행됩니다. patternawk의 TRUE는 다음과 같이 표시됩니다.아니요- 값이 0입니다. 따라서 다음 NR%2과 같습니다.NR%2 != 0

pattern {action}둘 중 하나는 생략될 수 있습니다.

  • pattern존재하지 않는 경우 {action}모든 레코드에 적용됩니다.

  • 존재하지 않는 경우 {action}기본 작업은 다음과 같습니다.{print}

이 모드는 각 레코드에 대해 기본 작업이 호출 1되도록 "항상 true" 모드로 자주 사용됩니다 .{print}

규칙은 왼쪽에서 오른쪽으로 읽습니다. 이 next문은 나머지 규칙을 건너뛰는 데 사용됩니다.

그러니 awk ' NR%2 {printf "%s,", $0; next;}1 ' < linepairs.csv실행해라

  • printf "%s,", $0평가 결과가 0이 아닌 경우 NR%2모드 1및 해당 기본 {print}작업을 건너뜁니다.

그리고

  • {print}그렇지 않으면

관련 정보