1

我有以下一段代码,并希望将它们并排显示HOST并分开。RESULT:

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}

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

4

2 回答 2

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
于 2013-11-15T11:12:49.283 回答
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管道到。但这都是题外话,所以我把它作为练习留给读者。)sedawk

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
于 2013-11-15T14:14:45.260 回答