system() 명령으로 awk에서 bash를 사용하도록 하세요.

system() 명령으로 awk에서 bash를 사용하도록 하세요.

호출 을 사용하여 시스템 명령을 실행할 때 awk가 sh 대신 bash를 사용하도록 하는 방법이 있습니까 system()?

[[ ]] 및 < > 문자열 비교 연산자와 같은 bash 관련 기능을 사용하고 싶습니다.

gawk 'BEGIN {system("if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi")}'
sh: [[: not found

답변1

Bash를 원하면 gawk를 패치하거나 bash를 직접 호출해야 합니다(인용문이 약간 복잡해집니다).

gawk 'BEGIN {
    script="if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi"
    system("bash -c '\''" script "'\''")
}'

답변2

awk다음 작업을 자체적으로 수행할 수 있습니다.

$ awk 'BEGIN { if ("A" < "B") print "A < B"; else print "A >= B" }'
A < B

정규식도 처리합니다.

$ awk 'BEGIN { if ("thing" ~ "^t") print "t-something"; else print "not t-something" }'
t-something

또는 예를 들면 다음과 같습니다.

$ awk 'BEGIN { if ("porc" == "porc") print "yes"; else print "no" }'
yes

awk외부 명령을 호출하는 데 사용 하면 system()속도가 매우 느려지고 명령을 가져올 수도 없습니다.산출awk프로그램 자체 에서 사용 가능한 형태로 해당 명령에서

관련 정보