(g)awk:替换另一个脚本中的表达式

(g)awk:替换另一个脚本中的表达式

我正在构建一个通用脚本,它将从其他几个脚本中重复使用。对于每种情况,我需要提取通用脚本中的第 N 个字段;在某些情况下,应从该脚本中删除双引号。字段分隔符也因情况而异。

理想情况下,我想简单地将整个awk语句传递给通用脚本,如下所示:

脚本1.sh:

 generic_script.sh "{print $1}"

脚本2.sh:

 generic_script.sh "BEGIN {FS=","} {gsub(/"/, "", $1);  print $1}"

通用脚本.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
$

相关内容