awk는 표준 입력에서 프로그램과 입력을 읽을 수 있습니까?
파일을 다음 함수로 파이프할 수 있기를 원합니다.
process_data () {
awk -f - <<EOF
{print}
EOF
}
참고: 실제 프로그램은 더 길고 명령줄 인수로 전달할 수 없으며 임시 파일을 사용하고 싶지 않습니다.
현재는 아무것도 출력하지 않습니다.
$ yes | head | process_data
$
답변1
process_data() {
awk -f /dev/fd/3 3<< \EOF
awk code here
EOF
}
명령줄 인수에는 개행 문자가 포함될 수 있으며 길이 제한이 있지만 일반적으로 수백 킬로바이트를 초과합니다.
awk '
BEGIN {...}
/.../ ...
END {...}
'
문제가 awk
스크립트에 작은따옴표 문자를 포함하는 것과 관련된 경우 다른 접근 방식은 코드를 변수에 저장하는 것입니다.
awk_code=$(cat << \EOF
{print "'quoted' " $0}
EOF
)
그리고 다음을 수행하십시오:
process_data() {
awk "$awk_code"
}
답변2
프로그램을 받아야 하는 이유표준 입력? '
Bash를 사용하면 내용을 여러 줄로 나눌 수 있으므로 작은따옴표( )를 사용할 수 있습니다 .
# awk 'BEGIN { sum = 0 }
{ sum += $1 }
END { printf("sum = %d\n", sum) }' << EOF
1
2
3
EOF