[英]Bash AWK find multiple patterns and assign to different variables
我目前有一個包含類似於以下值的變量:
x_snd_user=''
x_snd_appli=''
x_snd_text=''
x_rcv_user=''
x_rcv_appli=''
x_rcv_text=''
x_dup_from_xfer='0'
x_route_from_xfer='0'
x_route_to_xfer='0'
x_reply_by_xfer='0'
x_reply_to_xfer='0'
x_routed_to_XIB='N'
x_end_xfer_script=''
x_ftp_command=''
例如,我如何匹配 3 個模式( x_snd_appli, x_route_from_xfer, x_ftp_command
),格式化模式( awk -F"'" '{print $2}'
)並將它們分配給不同的變量?
例如,我有變量並想將輸出分配給這些:
- Application= The value of <x_snd_appli>
- Route= The value of <x_route_from_xfer>
- Command= The value of <x_ftp_command>
最好不要安裝需要安裝的東西,因為這是不可能的。 因此,如果可能,最好使用 AWK/perl。
變量的完整內容非常大(大約 45 行) ,當我運行腳本 1x 時,它可能會運行大約 1000 倍。 所以我不想將數據寫入文件/循環 10 次以 awk/grep 不同的值並將它們分配給變量。
您已經擁有一個有效的 shell 腳本。 你可以只獲取它:
$ source ./file
$ echo $x_dup_from_xfer
0
要重新分配,一些 sed/awk 可以提供幫助,例如:
$ eval $(sed -n 's/^x_route_from_xfer=/Route=/p' file)
$ echo $Route
0
-n
關閉自動打印行和s
替換, p
打印替換結果。 多個 sed 命令:
$ eval $(sed -n 's/^x_route_from_xfer=/Route=/p;s/.../.../p' file)
但是請注意,該 source 和 eval 要求控制文件內容的是您。
輸入也可能來自一個變量:
eval $(sed ... <<< "$var")
怎么樣:
#!/bin/bash
transfer="
x_snd_user=''
x_snd_appli=''
x_snd_text=''
x_rcv_user=''
x_rcv_appli=''
x_rcv_text=''
x_dup_from_xfer='0'
x_route_from_xfer='0'
x_route_to_xfer='0'
x_reply_by_xfer='0'
x_reply_to_xfer='0'
x_routed_to_XIB='N'
x_end_xfer_script=''
x_ftp_command=''
"
# or assign "transfer" with a output of other command.
while read -r line; do
eval "$line"
done < <(
awk -F= 'BEGIN {
a["x_snd_appli"] = "Application"
a["x_route_from_xfer"] = "Route"
a["x_ftp_command"] = "Command"
}
a[$1] {print a[$1] "=" $2}
' <<< "$transfer"
)
echo "Application=$Application"
echo "Route=$Route"
echo "Command=$Command"
正如其他人所說,在使用eval
時,我們最需要注意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.