частичная уникальность для строк в файле -оставить только первую доступную строку

Во-первых, в духе обучения, вот фиксированная версия вашей собственной логики (, завернутая и разделенная для удобства чтения):

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

1
22.10.2021, 09:13
0 ответов

Теги

Похожие вопросы