繁体   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