이는 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
첫 번째 입력 라인은 첫 번째 출력 라인입니다. 나머지 행은 정렬됩니다.