Во-первых, в духе обучения, вот фиксированная версия вашей собственной логики (, завернутая и разделенная для удобства чтения):
$ 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
Вот решение 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
)соответствующий текст без запятой -, причем каждый элемент находится в отдельной строке.