一度に 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 ではありません。代わりに、明示的なファイフを使用できます。(また、ホストと結果を生成するパイプラインを短縮する試み。これを 1 つの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