Почти никогда не бывает веских причин передавать grep
в awk
. awk
может выполнять сопоставление с образцом самостоятельно - вместо этого попробуйте awk '/not/ {print $2}'
.
Также нет необходимости передавать awk в другой awk. Здесь вам просто нужно указать набор разделителей полей (пробел и .
) вместо пробела по умолчанию в качестве разделителя:
awk -F'[ .]' '/not/ {print $2}'
A for
цикл вокруг cat
только для echo
содержимое каждой строки также бессмысленно. На самом деле, хуже, чем бессмысленно - это медленно, неэффективно и подвергает каждую строку стандартному разбиению слов оболочки (это не проблема с этим конкретным вводом, но потенциальная проблема, если вы считаете, что это хороший метод, и используете его во входных файлах, где строки может содержать пробелы и т. д.). Просто используйте cat
.
Но здесь даже не нужно использовать cat
. tee
копирует stdin как в файл, так и в stdout — т. е. это как причудливая версия cat
, которая также копирует свой ввод в файл.
Используя tee
, как указано в ответе αғsнιη, весь ваш однострочник можно сократить до:
for i in {1..255} ; do "host 10.1.9.$i" ; done |
awk -F'[ .]' '/not/ {print $2}' |
tee /tmp/flix
Даже в нестабильной версии Plasma все еще работает на версии 5.8, потому что Stretch должен быть выпущен с Plasma 5.8, а исправления ошибок всегда поступают из экспериментальной / нестабильной версии.
Вам придется подождать, пока не освободится Stretch.