首页 > 解决方案 > Unix:awk 将值保存为变量

问题描述

我有一个带有几个下划线的文件名:

nc_glals_3_4.mrc 

在那里我可以用 awk 读出值 3 和 4:

$ echo "nc_glals_3_4.mrc" | awk -F'[_.]' '{print$3$4}' 
34

但是如果我想将34 作为变量存储并调用该变量,它就不起作用:

$ variable=$("nc_glals_3_4.mrc" | awk -F'[_.]' '{print $3$4}')
-bash: nc_glals_3_4.mrc: command not found

$ variable="$("nc_glals_3_4.mrc" | awk -F'[_.]' '{print $3$4}')"
-bash: nc_glals_3_4.mrc: command not found

$ variable
-bash: variable: command not found

怎么了?

标签: bashvariablesawksave

解决方案


就像你echo在命令行中使用的一样,你也需要echo在子进程调用中使用,例如:

# wrong:

$ variable=$("nc_glals_3_4.mrc" | awk -F'[_.]' '{print $3$4}')

# right:

$ variable=$(echo "nc_glals_3_4.mrc" | awk -F'[_.]' '{print $3$4}')

# or using here string:

$ variable=$(awk -F'[_.]' '{print $3$4}' <<< "nc_glals_3_4.mrc")

然后echo再次使用来显示变量的值:

$ echo "${variable}"
34

推荐阅读