我有以下输出
$ cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
br-lan 03043836 C0A80101 0007 0 0 5 FFFFFFFF 0 0 0
br-lan C0A80100 00000000 0001 0 0 0 FFFFFF00 0 0 0
我使用awk提取包含目的地03043836
和面具FFFFFFFF
的行,然后我再次使用awk显示提取行中的第一个元素:
$ dest=03043836; mask=FFFFFFFF; va=1;
$ cat /proc/net/route | awk '$2=="'"$dest"'" && $8=="'"$mask"'"' | awk '{print $'"$va"'}'
br-lan
现在我想只在一个awk命令中收集两个awk命令。怎么做?
答案 0 :(得分:4)
dest=03043836; mask=FFFFFFFF; va=1;
awk -v dest="$dest" -v mask="$mask" -v va="$va" '$2==dest && $8==mask {print $va}' /proc/net/route
-v
用于为变量赋值。
答案 1 :(得分:2)
您可以将所有这三个结合起来(包括此处的cat
which is needless):
DEST = 03043836;掩模= FFFFFFFF; VA = 1;
awk -v dest =“$ {dest}” - v mask =“$ {mask}” - v va =“$ {va}”{print $ va}' 的/ proc /净/路由
答案 2 :(得分:1)
这不是一个答案,只是一些小例子,展示了为什么你应该使用Ashkan的答案:
---------
$ x="hello world"
$ awk -v y="$x" 'BEGIN{print y}'
hello world
$ awk 'BEGIN{print "'"$x"'"}'
hello world
---------
$ x="hello
world"
$ awk -v y="$x" 'BEGIN{print y}'
hello
world
$ awk 'BEGIN{print "'"$x"'"}'
awk: cmd. line:1: BEGIN{print "hello
awk: cmd. line:1: ^ unterminated string
awk: cmd. line:1: BEGIN{print "hello
awk: cmd. line:1: ^ syntax error
---------
$ x="hello world\\"
$ awk -v y="$x" 'BEGIN{print y}'
hello world\
$ awk 'BEGIN{print "'"$x"'"}'
awk: cmd. line:1: BEGIN{print "hello world\"}
awk: cmd. line:1: ^ unterminated string
awk: cmd. line:1: BEGIN{print "hello world\"}
awk: cmd. line:1: ^ syntax error
在后两种情况下,您希望脚本如何表现?