如何使用-v awk选项过滤掉文件中的行

时间:2013-04-30 19:35:26

标签: shell variables awk

我有一个格式为

的文本文件
key01=value
key02=value
...
keyN=value

我想检索特定键号的值。我使用文字使其工作,但在尝试使用$SEARCHKEY变量作为搜索输入时失败了。例如:

$echo $SEARCHKEY
KEY02

$awk -F= -v "searchKey=$SEARCHKEY" '/KEY02/ {print $2 " => " searchKey}' \ 
./parameterValue.lst

输出:

BBBB => KEY02

但是,当我将/KEY02/字面值更改为searchKey时,我无法正常工作:

awk -F= -v "searchKey=$SEARCHKEY" '/searchKey/ {print $2 " => " searchKey}' \
./parameterValue.lst

什么都不返回。我做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个:

awk -F= -v "searchKey=$SEARCHKEY" '$0 ~ searchKey {print $2 " => " searchKey}' input
使用-v - 标志时,

变量作为字符串传递给awk。 /searchKey/因此搜索字符串“searchKey”为了防止这种情况,请使用正则表达式匹配运算符~

答案 1 :(得分:0)

你应该避免在这里进行正则表达式匹配,因为它会给你带来意想不到的错误,因为/key02/(或$0 ~ searchKey)也可以匹配key022并给你错误的结果。

您可以使用等式检查来匹配文字键

,而不是正则表达式匹配
awk -F= -v searchKey="$SEARCHKEY" '$1==searchKey{print $2 " => " searchKey}' inFile