簡體   English   中英

如何僅用1個命令收集2個awk命令

[英]How to gather 2 awk commands in only 1 command

我有以下輸出

$ 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和Mask FFFFFFFF ,然后再次使用awk從提取的行中顯示第一個元素:

$ dest=03043836; mask=FFFFFFFF; va=1;
$ cat /proc/net/route | awk '$2=="'"$dest"'" && $8=="'"$mask"'"' | awk '{print $'"$va"'}'
br-lan

現在,我只想在一個awk命令中收集兩個awk命令。 怎么做?

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用於為變量分配值。

您可以將它們全部三者結合起來(包括這里不需要cat ):

dest = 03043836; mask = FFFFFFFF; va = 1;

awk -v dest =“ $ {dest}” -v mask =“ $ {mask}” -v va =“ $ {va}” {print $ va}'/ proc / net / route

這不是答案,只是幾個小例子,說明了為什么應該使用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

在后兩種情況下,您希望腳本如何表現?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM