awk에서 쉘 명령을 실행하고 다른 쉘 명령으로 리디렉션하는 방법은 무엇입니까?

awk에서 쉘 명령을 실행하고 다른 쉘 명령으로 리디렉션하는 방법은 무엇입니까?

컬을 사용하여 다운로드한 파일에서 특정 문자열을 가져와서 다운로드한 파일 내용을 다른 쉘 프로그램으로 리디렉션하고 싶습니다. 코드는 다음과 같습니다.

curl "http://file-list-url" -s | awk 'BEGIN {c=0} $0 ~ "FILE:" {urlpos=index($0,"URI=")+5;  fileurl=substr($0, urlpos, 150-urlpos-2);  print fileurl ; curl -s -H  "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36"   fileurl | hexdump -C | head -1  ; print filecontent }' 

각각을 얻은 후에는 fileurl컬을 사용하여 다운로드하고 내용을 가져온 다음 전달 hexdump하고 head최종 출력을 인쇄하고 싶습니다 head.

답변1

curl내부적으로 등을 실행하려고 시도하지 말고 awk이를 파이프라인의 처리 단계로 사용한 awk다음 파이프라인의 나머지 부분을 실행하십시오.

useragent='User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36

curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} curl -s -H  "$useragent" {} |
hexdump -C | head -n 1

또는 쌍에 대한 모든 도우미 호출을 원 hexdump하고 이에 대해 조치를 취하려면 다음을 수행하십시오 .headcurl

curl -s "http://file-list-url" |
awk '/FILE:/ { urlpos=index($0,"URI=")+5; print substr($0, urlpos, 150-urlpos-2) }' |
xargs -I {} sh -c '
    curl -s -H  "$useragent" "$1" |
    hexdump -C | head -n 1' sh {}

여기서는 xargs명령줄 인수만 사용하여 실행하고 curl결과 출력을 및 를 통해 전달하는 작은 쉘 스크립트를 실행하는 데 을 사용하고 있습니다. hexdumphead

관련 정보