将awk命令存储在bash脚本的变量中

cuc*_*bit 3 awk

我想存储awk命令在一个变量(命令,而不是结果).我的目标是稍后在脚本中使用该变量,使用不同的输入.例如:

cmd=$(awk '/something/ {if ...} {...} END {...}')
$cmd $input
Run Code Online (Sandbox Code Playgroud)

我试图用$()(就像在例子中)存储命令,也用backticks...但我无法实现它.

我感谢帮助或任何建议:)

Ed *_*ton 6

不要这样做,使用函数而不是变量,它是存在的函数:

$ cmd() { awk -v x="$1" 'BEGIN{print x}'; }
$ cmd foo
foo
$ cmd bar
bar
Run Code Online (Sandbox Code Playgroud)

一个不同的例子:

$ cat file1
a
b

$ cat file2
c
d
e

$ cmd() { awk '{print FILENAME, $0}' "$1"; }

$ cmd file1
file1 a
file1 b

$ cmd file2
file2 c
file2 d
file2 e
Run Code Online (Sandbox Code Playgroud)

  • 我们欢迎您,并感谢您愿意倾听除您所提出的具体问题的答案之外的其他方法.我认为从长远来看,使用别名和函数会比尝试在变量中存储命令更快乐. (3认同)
  • +1,因为它通常是更好的方法; 但是,在这种情况下,不清楚_variables_是否需要传递给`awk`程序 - 问题表明调用之间的不同之处是_filename参数_(但最终也可能是变量赋值). (2认同)

mpe*_*ez0 5

忘记反引号和括号。您只想存储awk脚本本身

cmd='/something/ {if ...} {...} END {...}'
awk "$cmd" $input
Run Code Online (Sandbox Code Playgroud)

  • 这是 bash 的新手,正在努力学习如何使用它。他可能了解变量,但显然不知道何时适合使用这些与别名和函数。他有一个很大的 awk 脚本,他想在几个地方调用它。我认为重要的是我们向他展示了正确的做法,而不是支持他以错误的方式实施的愿望,即使错误的方式在这种特殊情况下可能会充分发挥作用(我不相信它会,这取决于脚本和/或输入文件内容,但我对试图找出它是否/在哪里失败不感兴趣)。 (2认同)