2013-11-15 17 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