Linux Bash和awk-在进行多行模式数学时,如何将变量传递给awk?
我正在使用Linux Bash和awk-在进行多行模式数学时,如何将变量传递给awk?,linux,bash,awk,gawk,Linux,Bash,Awk,Gawk,我正在使用AWK与模式进行多行匹配。 例如: awk '/"ip": /,/"id": /' 当我知道ip时,我想向AWK传递一个参数,以便它返回包含指定ip的行。例如: awk '/"ip": "$IP"/,/"id": /' 有什么办法呢 我试过: awk '/"ip": "$IP"/,/"id": /' awk '/"ip": "${IP}"/,/"id": /' awk "/\"ip\": \"$IP\"/,/\"id'\": /" 我想知道如何将这种方法用于模式: var="he
AWK
与模式进行多行匹配。
例如:
awk '/"ip": /,/"id": /'
当我知道ip
时,我想向AWK传递一个参数,以便它返回包含指定ip的行。例如:
awk '/"ip": "$IP"/,/"id": /'
有什么办法呢
我试过:
awk '/"ip": "$IP"/,/"id": /'
awk '/"ip": "${IP}"/,/"id": /'
awk "/\"ip\": \"$IP\"/,/\"id'\": /"
我想知道如何将这种方法用于模式:
var="hello"; awk -v a="$var"
谢谢
回答
- 已接受,可在下面找到
- 任何对如何使匹配更精确感兴趣的人(使用变量+字符串模式)的其他详细信息。请注意,您不能用双引号将模式中使用的变量包装起来,即使引号被转义,它也不起作用:
cat l.txt | awk '$0 ~ "\"ip\": \"103.6.181.43", $0 ~ "\"id\": \""' ===> works cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ ipvar, $0 ~ "\"id\": \""' ===> works cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \"ipvar", $0 ~ "\"id\": \""' ===> does not work cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \""ipvar, $0 ~ "\"id\": \""' ===> works
awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \"ipvar\"", $0 ~ "\"id\": \""' ===> will not work
awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \""ipvar"\"", $0 ~ "\"id\": \""' ===> will work and is equivalent.
您试图在单引号内展开一个变量。单引号(')使它们之间的所有内容都被bash按字面意思理解。尝试使用双引号,请参见 关于你关于
awk
作业的问题,这里有一个例子:
awk-v foo=“bar”'foo~$0'不要在/
中添加变量,因为那里有一个正则表达式
相反,一定要使用$0~模式
,这会给你更多的自由。毕竟,
/pattern1/,/pattern2
与
$0 ~ pattern1, $0 ~ pattern2
因此,您可以使用-v
提供值并说:
awk -v var="$bash_variable" '$0~"ip: " var,$0 ~ "id: " var'
# ^^^^^^^^^^^^^
# ^^^^^^^^^^^^^^^
# start end
试验
我已经尝试过双qoutes——它在示例中。另外,我不明白赋值示例是如何使用模式的——我仍然希望以某种方式保留多行匹配:)您是否试图匹配由双引号排序的IP
?是的,数据示例如下所示“IP”:“127.0.0.1”,
。。然后是几行(行数未知,所以我需要模式),然后是“id”:“123”,我明白了。查看@fedorqui答案。它比我的好。请添加示例输入和预期输出。谢谢,我还会在OP中添加更多的点,以供任何迷路或偶然发现以下问题的人参考:)@MindaugasBernatavičius很高兴阅读它对您有用。我的回答很简单。我想你的最终解决方案是有点麻烦,因为所有这些双引号需要转义。好在你把最终版本展示给未来的读者!
$ cat a
hello
ip: 23
bye
and this is
id: 23
hehe
done
$ awk -v var=23 '$0~"ip: " var,/id: /' a
ip: 23
bye
and this is
id: 23