![(g)awk:替换另一个脚本中的表达式](https://linux22.com/image/11637/(g)awk%EF%BC%9A%E6%9B%BF%E6%8D%A2%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我正在构建一个通用脚本,它将从其他几个脚本中重复使用。对于每种情况,我需要提取通用脚本中的第 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
$