![](/img/trans.png)
[英]sed/awk between two patterns in a file: pattern 1 set by a variable from lines of a second file; pattern 2 designated by a specified charcacter
[英]Set variable from awk while parsing lines from a multiline file
我有一個txt文件,其中包含多行,每行描述一個遠程服務器,如下所示:
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"
然后,如果要在第四個字段中設置VPN變量,則可以使用:
while IFS=':' read -ra array; do
# ...
VPN="${array[3]}"
done < "$CUSTOMER_SERVERS_FILE"
另一個解決方案:
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`"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.