ИМХО более изящно (ясно понятно )избегая "трюков" с tee
.
@mikeserv уже показал команду sed
, вы также можете «вставить» внутрь awk
.
Пример с заменой команды командой printf
:
$ printf "foo %s %s %s\n" {1..30}
foo 1 2 3
foo 4 5 6
foo 7 8 9
foo 10 11 12
foo 13 14 15
foo 16 17 18
foo 19 20 21
foo 22 23 24
foo 25 26 27
foo 28 29 30
Требование (пример):
Вставить вывод из
sed -rn '/3/ s/[^ ]* ([^ ]*).*/\1/'
awk 'NR>2 {print $3}'
Поток из требования 1 захватывается в массив bar
,
поток из требования 2 захватывается в массив secondstream
.
После обработки всех входных данных в блок END вставляются захваченные потоки.
printf "foo %s %s %s\n" {1..30} |
awk '/3/ {bar[barcounter++]=$2}
NF>2 {secondstream[streamnr++]=$3}
END {for (i=0;i<streamnr;i++) print bar[i], secondstream[i];}
'
Результат:
1 2
13 5
22 8
28 11
14
17
20
23
26
29