(g)awk: 다른 스크립트의 표현식 교체

(g)awk: 다른 스크립트의 표현식 교체

여러 다른 스크립트에서 재사용할 일반 스크립트를 작성 중입니다. 각 경우에 대해 공통 스크립트에서 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
$

관련 정보