一个没有数组的版本,使用一个额外的文件句柄一次从 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
awk
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