6

我有一个被调用的 awk 脚本:

awk -f myawkfile.awk arguments

使用相同的调用将 awk 脚本调用到我的 bash 脚本中。

我可以在我的 bash 脚本中将其声明为函数,而不是调用 awk 脚本。我认为通过awk在整个代码的前后打勾,然后分配一个函数名称来随意调用它会很容易。不知何故,它没有做的伎俩。

我正在尝试这样做,因为我不希望我的脚本依赖于另一个脚本。而且我不是写awk剧本的人。它需要一个文件作为输入,做一些事情并返回在我的脚本中使用的修改后的文件。

4

2 回答 2

10

使用heredoc符号可以写出这样的东西

#!/bin/bash

awk_program=$(cat << 'EOF'
    /* your awk script goes here */
EOF
)

# ...

# run awk script
awk "$awk_program" arguments

# ...
于 2012-07-24T11:51:33.520 回答
3

只需在函数中编写 awk 脚本:

#!/bin/sh -e

foo() { awk '{print $2}' "$@"; }
foo a b                         # Print the 2nd column from files a and b
printf 'a b c\nd e f\n' | foo   # print 'b\ne\n'

请注意,如果将空字符串作为参数传递,则 awk 标准在行为上似乎模棱两可,但 shell 保证"$@"扩展为零字段而不是空字符串,因此只有在foo使用空参数调用时才会出现问题。

于 2012-07-24T15:04:26.697 回答