첫 번째 줄을 제외하고 awk의 출력을 정렬하시겠습니까?

첫 번째 줄을 제외하고 awk의 출력을 정렬하시겠습니까?

이는 CSV 파일을 구문 분석할 때 계속해서 접하게 되는 사용 사례입니다. awk쉘 스크립트에 포함된 인라인 스크립트 인 경우 다음 해결 방법을 사용할 수 있습니다.

myfile="$(mktemp)"
awk '(awk script here)' > "$myfile"
head -1 "$myfile"
sed 1d "$myfile" | sort
rm "$myfile"

(또는 BSD mktemp에 적절한 mktemp 템플릿을 사용하십시오. GNU는 위에서 설명한 대로 작동합니다.)

그러나 shebang을 사용하여 전체 awk 스크립트를 작성할 때 #!/bin/awk -f출력 정렬 요소를 처리하기 위해 이를 쉘 스크립트로 변경하고 싶지 않습니다.

awk에서는 어떻게 할 수 있나요? 또는 awk에 기본 정렬 기능이 없는 경우 awk 파이프에 대해 어디서 배울 수 있고 shebang을 변경하지 않고 이를 수행하기 위해 파이프를 사용하는 방법은 무엇입니까?

답변1

다음은 첫 번째 행을 제외한 모든 행을 정렬하는 예입니다.

#!/bin/awk -f
BEGIN{cmd="sort"}
NR==1{print;next}
{print $1,$2 | cmd}
END{close(cmd)}

다음 문서를 고려해보세요:

$ cat file
Letter  Value
A       12
D       10
C       15
B       13

그 다음에:

$ awk -f script.awk file
Letter  Value
A 12
B 13
C 15
D 10

첫 번째 입력 라인은 첫 번째 출력 라인입니다. 나머지 행은 정렬됩니다.

관련 정보