Bash 分析多行文件中的行时,从awk设置变量
我有一个txt文件,有几行,每行描述一个远程服务器,如下所示:Bash 分析多行文件中的行时,从awk设置变量,bash,shell,awk,Bash,Shell,Awk,我有一个txt文件,有几行,每行描述一个远程服务器,如下所示: user@server:port:remote_working_path:whether_using_VPN :char分隔了4个字段 我需要在每个服务器中操作批处理操作,因此我需要解析每一行并设置适当的变量。现在,我编写的代码是: while read server; do echo "$server" | awk -F ':' '{print $1}' && echo "$ser
user@server:port:remote_working_path:whether_using_VPN
:char分隔了4个字段
我需要在每个服务器中操作批处理操作,因此我需要解析每一行并设置适当的变量。现在,我编写的代码是:
while read server;
do
echo "$server" | awk -F ':' '{print $1}' &&
echo "$server" | awk -F ':' '{print $2}' &&
echo "$server" | awk -F ':' '{print $3}'
echo "$VPN"
declare $( echo "$server" | awk -F ':' '{print $VPN=$4}' )
echo 'VPN: '$VPN
done < $CUSTOMER_SERVERS_FILE
这个脚本只打印前3个字段,在我的意图中,还应该将$VPN变量设置为第4个字段。然而,这似乎坏了,我无法修复它。我应该如何修改它,使$VPN=$4?首先,在这种情况下,您不需要使用awk。您可以尝试使用以下内容:
while IFS=':' read -ra array; do
# "${array[0]}" => first field
# "${array[1]}" => second field
# ...
# "${array[@]}" => all fields
done < "$CUSTOMER_SERVERS_FILE"
最后,当您希望在变量中分配命令的输出时,可以执行以下操作:
var="$(command)"
# or
var="`command`"
为什么不只是tr':'$'\n'<$文件?@hek2mgl:我不太明白与OP的问题之间的联系。@IdrissNeumann基本上OP只是在新行上输出每个字段。不是吗?@hek2mgl我不这么认为。看看我的答案。我已经看到了,这是有道理的。然而,问题中的例子毫无意义。像个魔术师一样工作。非常感谢您,非常干净简单的解决方案。希望有一天我能学会如何编写bash脚本@我很高兴能帮助你。如果您想提高Bash脚本级别,请毫不犹豫地参考高级Bash脚本指南:+1:尽管我不推荐高级Bash脚本指南。我更愿意指出Lhunah的观点。我也有一个很好的完整课程,更容易开始shell POSIX和bash编程,但不幸的是用法语@jaypal感谢您共享此链接。如果要将数组的每个元素分配给循环体中的一个单独变量,请让read为您完成分配:IFS=:read-r address port path vpn。
while IFS=':' read -r address port path vpn trash; do
# The variables $adress $port $path and $vpn are assigned.
# $trash is set with other fields if there are more than 4 fields
done
var="$(command)"
# or
var="`command`"