在脚本中使用Awk命令中的变量

时间:2014-03-21 21:21:12

标签: shell awk ksh

使用变量并使用awk命令打印第二个字段时遇到一些麻烦。我试图从文件中的值中获取一个数字。文件中的值类似于

MAX = 10000(我只想要数字),我将它传递给脚本中的变量,所以在脚本中我有变量

parm_file=ParmFiles/Parmfile.parm
session=s_session_value

OLD_MAX_SEQ_NR=`awk -F '=' "/$session/ {getline; print $2}" < $parm_file` 

因为我有双引号来标识$ session变量,它也将$ 2作为变量,所以它只是打印整行,而不是第二个字段。

我也尝试将变量传递给awk命令,如

OLD_MAX_SEQ_NR=`awk -F '=' \
    -v var="$session" \
    '/var/ {getline; print $2}' < $parm_file`

但似乎并没有将变量放在var所在的位置。我甚至尝试过对-v var="s_session_value"进行硬编码,但它不起作用。

我无法找到一种方法让命令看起来像$2一样,而不是变量。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果没有parm文件的示例行,这有点棘手。但我不明白为什么你不使用cut,它会让它变得更容易?

OLD_MAX_SEQ_NR=$(grep "$session" "$parm_file" | cut -d= -f2)

答案 1 :(得分:0)

试试这个:

parm_file=ParmFiles/Parmfile.parm
session=s_session_value

OLD_MAX_SEQ_NR=$(
    awk -F'=' -v pat="$session" \
        '$0 ~ pat {getline; print $2}' < "$parm_file"
) 
  • 您需要使用awk定义awk变量,将shell变量传递给-v
  • /../内使用变量视为文字。所以使用$0~var_name construct。
  • 不推荐使用反向标记。使用命令替换$(..)
  • 引用您的变量。