나는 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}
이면 실행됩니다. pattern
awk의 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}
그렇지 않으면