2017-06-12 51 views
0

下面你可以找到我用於從xml文件中提取2行輸出的awk和sed命令的輸出。我必須將主機名和端口名分配給4個不同的變量,以便我可以使用這些進行進一步的查詢。你能幫忙嗎?將多行的輸出列分配給不同的變量?

cat file | awk | SED產生下面兩行

Address host1 port_1 Address 
BackupAddress host2 port_2 BackupAddress 

所需的輸出

hosta="host1" 
porta="port_1" 
hostb="host2" 
portb="port_2" 

我將不勝感激,歡迎您的分辨率的詳細說明。

+0

讓我們看看**之前的文件**你做'cat file | awk | sed'因爲這不是一個很好的起點。還要說明是否希望輸出4行代碼,或者如果您想要某種輸出,然後您可以執行這4個分配給shell變量的輸出。 –

+0

在開始處張貼'cat file'的一個片段 – RomanPerekhrest

回答

0

用AWK:

awk ' 
    /^Address/  { print "hosta=\""$2"\"\nporta=\""$3"\"" } 
    /^BackupAddress/ { print "hostb=\""$2"\"\nportb=\""$3"\"" }' file 

,或者使用一個變量來保存雙引號,以減少混亂:

awk -v q='"' ' 
    /^Address/  { print "hosta="q$2q"\nporta="q$3q } 
    /^BackupAddress/ { print "hostb="q$2q"\nportb="q$3q }' file 

我不知道你使用的是什麼代碼當前。如果你已經用awk寫過,那麼你也可以在上面加入上面的邏輯。

+0

嗨,感謝您的回覆 - 但這並不會產生我讀過的結果。 – theuniverseisflat

+0

它只打印行,但我不能使用結果作爲變量。我覺得這個命令很有用,但它並沒有做到我所需要的。我假設打印命令只是打印並且不設置變量。 – theuniverseisflat

+0

您可以使用'eval' - 'eval $(awk ... file)'來設置變量。 – codeforester