Quase nunca há um bom motivo para canalizar grep
para awk
. awk
pode fazer correspondência de padrões sozinho - tente awk '/not/ {print $2}'
.
E o piping awk em outro awk também é desnecessário. Aqui você só precisa fornecer um conjunto de separadores de campo (espaço e .
) em vez do espaço em branco padrão como separador:
awk -F'[ .]' '/not/ {print $2}'
Um loop for
em torno de cat
apenas para echo
o conteúdo de cada linha é sem sentido. Na verdade, é pior que inútil - é lento, ineficiente e submete cada linha à divisão de palavras padrão do shell (não é um problema com essa entrada específica, mas potencialmente um problema se você achar que essa é uma boa técnica e usá-la em arquivos de entrada pode conter espaços etc). Apenas use cat
.
Mas você nem precisa usar cat
aqui. tee
copia stdin para um arquivo e para stdout - isto é, é como uma versão sofisticada de cat
que também copia sua entrada para um arquivo.
Usando tee
como mencionado por @AFSHIN, todo o seu one-liner pode ser reduzido para:
for i in {1..255} ; do "host 10.1.9.$i" ; done |
awk -F'[ .]' '/not/ {print $2}' |
tee /tmp/flix