簡體   English   中英

Bash AWK 查找多個模式並分配給不同的變量

[英]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.

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