shell - 是否可以通过 gnu awk 命令使用变量而不是文件?

标签 shell awk

我是 shell 脚本新手,我正在阅读一个脚本,但我不明白使用 gawk 命令的函数。

  awk_egrep () {
  local pattern_string=$1

  gawk '{
    while ($0) {
      start=match($0, pattern);
      token=substr($0, start, RLENGTH);
      print token;
      $0=substr($0, start+RLENGTH);
    }
  }' pattern="$pattern_string"
}

当我开始阅读 GNU awk 手册时,它写道:如果程序很短,则最容易 将其包含在运行 awk 的命令中,如下所示: awk '程序' 输入文件1 输入文件2 ...

我的问题:当作者写作时 模式=“$pattern_string” 他使用变量而不是文件吗? 在搜索时我发现要使用变量我们可以使用像这样的管道 echo “$var1”| awk。

最佳答案

pattern="$pattern_string" 使用 bash 变量 pattern_string 的内容声明 awk 的变量 pattern(此处为 $1) >)。 awk 从标准输入而不是文件中读取。

而不是

gawk '...' pattern="$pattern_string"

您还可以使用:

gawk -v pattern="$pattern_string" '...'

关于shell - 是否可以通过 gnu awk 命令使用变量而不是文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58472078/

相关文章:

AWK:如何实现编号自增?

linux - 2个文件之间的差异(awk)

Linux 询问自定义/别名命令的密码?

linux - 想在脚本中制作多个标志吗?

linux - 如何简化匹配 IP 地址的 if-else 语句

c - 如何实现历史记录功能?

python - 使用 Paramiko 在 Python 中通过 ssh 实现交互式 shell?

python - 根据另一个文件中的行号从一个文件中提取行

linux - 使用 awk 命令用逗号替换双引号 csv 文件中的管道

linux - 用于替换文件中所有出现的占位符的 bash 脚本