如何在搜索中使用awk变量?
Name="jony"
awk -v name="$Name" '/name/ {print $0}' file
这将搜索字符串name
,而不是实际上为jony
的$Name
。
正确的做法是,awk
不会识别/ /
中的变量。你可以这样做:
Name="jony"
awk -v name="$Name" '$0 ~ name' file
由于print
是awk
的默认行为,因此我们可以避免在此处使用它。
awk '/'"$Name"'/ { print } ' testfile
当编写AWK单行脚本时,您可以使用单引号或双引号引用脚本。在后一种情况下,Shell直接进行所有替换,因此您不需要通过-v
选项将变量传递到脚本中:
Name="jony"
awk "/$Name/" file
# this works. after shell has performed substitutions, the line looks like
awk "/jony/" file
[不好!]或者如果名称中不包含空格,甚至可以不用引号:
awk /$Name/ file
awk "/$Name/ {print \$0}"
awk "/$Name/ {print \"Found in: \" \$0}"
awk "!/$Name/"
#error> ... event not found ...
~(波浪号)
,~
运算符正则表达式也可以用于匹配表达式。这些表达式允许您指定要匹配的字符串;它不需要是整个当前输入记录。两个运算符~
和!~
执行正则表达式比较。使用这些运算符的表达式可以用作模式,或在if、while、for和do语句中使用。 - jaypal singhecho "Hi this is jony" | awk '$0 ~ holmes'
时,awk
将homes
视为未定义的变量,因此打印该行。如果你想让awk
将其视为字面字符串,你需要将其加上引号。 - jaypal singh