簡體   English   中英

解析多行文件中的行時,從awk設置變量

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

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