命令 |查询 | awk 保存到变量中或将其作为函数执行

命令 |查询 | awk 保存到变量中或将其作为函数执行

我试图将命令的值保存到变量中,但它给出了错误

var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'` 

它给了我错误

var: command not found

答案1

是的,这会给你一个错误,因为=in 变量赋值不能被 shell 中的空格包围。 shell 会解释该行,因为您想要运行使用var参数调用的命令=以及命令替换返回的任何内容(在另外将结果拆分为单词并对这些单词应用文件名通配之后,因为它没有被引用)。

相反,使用

var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )

我还冒昧地删除了 和grepcat并将使用反引号的已弃用命令替换更改为使用反引号$( ... )

您还可以使用grep,cut和 来做到这一点head

var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )

或者,如果您grep可以-m选择在特定数量的比赛后停止:

var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )

或者,如果您要搜索的表达式实际上是字符串而不是正则表达式:

var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )

相关内容