여러 다른 스크립트에서 재사용할 일반 스크립트를 작성 중입니다. 각 경우에 대해 공통 스크립트에서 N번째 필드를 추출해야 합니다. 어떤 경우에는 스크립트에서 큰따옴표를 제거해야 합니다. 필드 구분 기호도 상황에 따라 달라집니다.
awk
이상적으로는 전체 명령문을 다음과 같은 일반 스크립트에 전달하고 싶습니다 .
스크립트1.sh:
generic_script.sh "{print $1}"
Script2.sh:
generic_script.sh "BEGIN {FS=","} {gsub(/"/, "", $1); print $1}"
범용 script.sh
awk_expression="$1"
awk '$awk_expression' file_to_process.txt
( "
이 질문의 가독성을 위해 의도적으로 script2.sh의 및 이스케이프를 생략했습니다.)$
이러한 공통 스크립트를 만들고 두 스크립트 모두에 올바른 매개변수를 제공하는 "충분히 올바른" 방법은 무엇입니까?
둘 다 저 awk
에게 효과적입니다 gawk
. 저는 MacOS HighSierra 10.13.6을 사용하고 있습니다.
답변1
이는 이를 재정의해야 합니다.
$ cat generic_script.sh
#!/bin/bash
awk_expression="$1"
awk "$awk_expression" file_to_process.txt
$ cat file_to_process.txt
"foo","bar"
$ ./generic_script.sh '{ print $1 }'
"foo","bar"
$ ./generic_script.sh 'BEGIN {FS=","} {gsub(/"/, "", $1); print $1}'
foo
$