使用“:”分隔变量打印到同一行

时间:2013-11-15 10:19:11

标签: bash

我有以下代码,并希望将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}

任何人都可以协助最终命令显示这些,我只是获取所有主机,然后是所有结果。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中进行替换,或者管道到{来自sed内的{1}}。但这都是偏离主题的,所以我把它作为练习留给读者。)

awk