У меня есть список пользователей в основном из /etc/group, я хотел бы в основном отформатировать эту строку в один столбец, мне нужны только пользователи. Так что если поле выглядит так:
bob,john,jane,sam,joyce
Тогда я бы хотел, чтобы это выглядело вот так.
bob
john
jane
sam
joyce
Я знаю, как сделать наоборот, но не этот тип.
решение1
Это можно сделать с помощью sed:
sed 's/,/\n/g'
Это заменит все вхождения на ,
новую строку. g
Заставит sed заменить все вхождения в строке, а не только первое.
решение2
Чтобы ответить, используя предложенные вами теги:
Баш:
$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce
awk:
$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce
Этот $1=$1
бит представляет собой идиому awk для перезаписи текущей записи с использованием разделителей выходных полей, что не происходит, если какое-либо поле не изменено.
решение3
решение4
Если вы хотите использовать awk (похож наРаспечатать все поля с AWK, разделенные OFS):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'