AWK中的Bash变量

AWK中的Bash变量,bash,awk,Bash,Awk,我正在尝试使用awk命令在循环中传递变量以查找值。我有一个文件: input.txt 1234|something|ohmygod 2345|urabura|kangura 9999|1234|xxxsecrets shell命令 cat input.txt | awk -F'|' '$1 ~ /1234/' 或 根据需要从文件中获取第一行。当我试图通过bash打印此文件时出现问题。当我简单地测试echo时,如: echo `cat input.txt | awk -F'|' '$1 ~ /

我正在尝试使用awk命令在循环中传递变量以查找值。我有一个文件:

input.txt

1234|something|ohmygod
2345|urabura|kangura
9999|1234|xxxsecrets
shell命令

cat input.txt | awk -F'|' '$1 ~ /1234/'

根据需要从文件中获取第一行。当我试图通过bash打印此文件时出现问题。当我简单地测试echo时,如:

echo `cat input.txt | awk -F'|' '$1 ~ /1234/'`

我得到了期望的输出,但不幸的是,当我试图在其中传递变量时

variable1="1234"
echo `awk -F'|' '$1 ~ /"$variable1"/' input`

它给出了一条空行。请建议如何在regex awk过滤器内传递变量

PS这不是重复的问题:因为我知道如何在AWK中使用变量,正如我在这里发布的(-v参数),但问题是如何在AWK中传递正则表达式中的变量(位于两个斜杠之间-echo
AWK-F'|'$1~/“$variable/”input

您要求的:

awk -v var="$variable1" -F'|' '$1 ~ var' input
你真正需要的是:

awk -v var="$variable1" -F'|' '$1 == var' input

另请参见,
echo$(cmd)
是一个函数,除非您特别要求shell对
cmd
的输出执行空格标记化和变量替换。(带有反勾号“`cmd``的旧语法已经过时,应该避免使用。我必须添加echo,因为我想调试更改。它没有这样做,它引入了新的难以调试的角落案例。@tripleee,但shell没有任何变量“watcher”那么如何调试我的更改呢?您可能正在寻找
set-x
,不幸的是,将~to“”更改为“”没有帮助。这不是Ed的建议。@WontProvide您在哪里看到
~
更改为
?@EdMorton我的打字错误,我的意思是==将
~
更改为
==
并不是为了回答您提出的问题,这就是将
/var/
更改为
var
所做的。将
~
更改为
=
使其成为完整的字符串比较,而不是部分regexp比较,从而避免了错误匹配。
variable1="1234"
echo `awk -v var="$variable1" -F'|' '$1 ~ /var/' input`
awk -v var="$variable1" -F'|' '$1 ~ var' input
awk -v var="$variable1" -F'|' '$1 == var' input