2013-11-15 39 views
1

我有以下一段代碼,並希望將HOSTRESULT:並排顯示。打印在與「:」分隔變量的同一行上:

HOST=`grep pers results.txt | cut -d':' -f2 | awk '{print $1}'` 
RESULT=`grep cleanup results.txt | cut -d':' -f2 | awk '{print $1}' | sed -e 's/K/000/' -'s/M/000000/'` 
echo ${HOST}${RESULT} 

請任何人都與最終的命令輔助顯示這些,我只是讓所有的主機,然後所有的結果。

+0

'有:分隔條件them' - 你說:'回聲 「$ {HOST} $ {}結果」' – devnull

+0

對不起我應該正確解釋,greps返回更多的結果。我得到了一個主機字符串列表和一個結果列表。返回的字符串和整數的順序是正確的,例如HOST [0]和RESULT [0]匹配。我想並排顯示它們。 –

+1

提供來自results.txx文件的示例數據。 – anubhava

回答

2

你可能想這樣的:

HOST=(`grep pers results.txt | cut -d':' -f2 | awk '{ print $1 }'`) #keep the output of the command in an array 
RESULT=(`grep cleanup results.txt | cut -d':' -f2 | awk '{ print $1 }' | sed -e 's/K/000/' -'s/M/000000/'`) 
for i in "${!HOST[@]}"; do 
    echo "${HOST[$i]}:${RESULT[$i]}" 
done 
+0

你先生是冠軍。謝謝。 –

0

,沒有陣列的工作原理,使用一個額外的文件句柄的時間從2種源來讀取一個版本。

while read host; read result <&3; do 
    echo "$host:$result" 
done < <(grep peers results.txt | cut -d: -f2 | awk '{print $1}') \ 
    3< <(grep cleanup results.txt | cut -d':' -f2 | awk '{print $1}' | sed -e 's/K/000/' -'s/M/000000/') 

它仍然不是POSIX,因爲它需要進程替換。你可以改用明確的fifes。 (另外,試圖縮短產生主機和結果的流水線,可能將這個命令合併爲一個awk命令,因爲您可以在awk中執行替換,或者從awk中執行之間的管道輸入sed。題外話,所以我把它作爲一個練習,讀者)

mkfifo hostsrc 
mkfifo resultsrc 
awk -F: '/peers/ {split($2, a, ' '); print a[1]}' results.txt > hostsrc & 
awk -F: '/cleanup/ {split($2, a, ' '); print a[1]}' results.txt | sed -e 's/K/000' -e 's/M/000000/' > resultsrc & 

while read host; read result <&3; do 
    echo "$host:$result" 
done < hostsrc 3< resultsrc