Да, вы можете настроить вход в Logstash с помощью чего-то вроде:
input {
tcp {
port => 5000
type => syslog
}
}
$ echo machine23,machine094,machine73,machine83 | tr ',' '\n'
machine23
machine094
machine73
machine83
или если вы действительно хотели сделать это в awk (, возможно, потому что вы хотите выполнить дальнейшую обработку в awk):
$ echo machine23,machine094,machine73,machine83 | \
awk -F',' -v OFS='\n' '{$1=$1;$0=$0;print}'
machine23
machine094
machine73
machine83
Здесь используется хитрый прием awk: если вы измените любое поле (, даже установив его равным самому себе, как в $1=$
), а затем установите $0=$0
, awk переформатирует всю строку ввода -, заменив исходные разделители полей (FS
, запятая в данном случае )с разделителем выходных полей (OFS
, новая строка в данном случае ).
Во-первых, в духе обучения, вот фиксированная версия вашей собственной логики (, завернутая и разделенная для удобства чтения):
$ echo machine23,machine094,machine73,machine83 \
|awk -F"," '{ for (i = 1; i <= NF; i++) { printf "%-20s\n", $i } }'
machine23
machine094
machine73
machine83
Поскольку вы использовали %-20s
, это добавляет немного пробела в конце (выберите приведенный выше вывод, чтобы увидеть его ), но все, что я сделал, это переместил printf "\n"
в printf
внутри for
петля.
Поскольку в вашей версии было так мало пробелов, вот код -решение для игры в гольф с использованием вашей логики:
echo machine23,machine094,machine73,machine83|awk -F, '{while(i<NF)print$++i}'
Вот решение awk, не зависящее от поля -, использующее глобальную замену без использования цикла:
$ echo machine23,machine094,machine73,machine83 |awk '{ gsub(/,/,"\n"); print }'
machine23
machine094
machine73
machine83
Это имитирует следующее решение sed:
$ echo machine23,machine094,machine73,machine83 |sed 's/,/\n/g'
machine23
machine094
machine73
machine83
В обоих случаях запятые просто заменяются символами новой строки, точно так же, как решение cas'а tr .
Вот решение grep:
$ echo machine23,machine094,machine73,machine83 |grep -o '[^,]*'
machine23
machine094
machine73
machine83
Здесь grep показывает только(-o
)соответствующий текст без запятой -, причем каждый элемент находится в отдельной строке.