쉘 cmd를 통한 awk 파이프 입력 및 출력

쉘 cmd를 통한 awk 파이프 입력 및 출력

awk에서 쉘 명령을 실행하고 싶습니다. 쉘 명령은 일반적으로 stdin을 사용하여 stdout에 씁니다.

print to_sort | "sort"
"sort" | getline

작동하지 않습니다 (입력을 기다리는 두 번째 줄에서 정렬)

print to_sort | "sort" | getline

문법 오류입니다.

답변1

GNU는 알고 있어요공동 프로세스이것은 가능합니다. 설명서에는 수행 중인 작업이 작동하지 않는 이유도 설명되어 있습니다. 파이프라인에 사용된 두 명령은 동일한 명령줄을 사용하여 시작되었음에도 불구하고 서로 다른 하위 프로세스입니다. 동일한 하위 프로세스에서 입력과 출력을 얻으려면 |&두 파이프 모두에서 사용하십시오.

awk 'BEGIN {com = "cat -n"} {print |& com; com |& getline; print}'

하지만 이것은 생산을 하지 않기 sort때문에 실제로 도움이 되지 않습니다.sort어느입력에 EOF가 나타날 때까지 출력합니다.

이와 같은 명령의 경우 먼저 모든 출력을 제공하고 coprocess 파이프의 쓰기 끝을 닫은 다음 읽기를 시작해야 합니다. 예를 들어

awk 'BEGIN {com="sort"} {print |& com} END { print "---"; close(com, "to"); while(com |& getline) print }'

관련 정보