Transforme linhas separadas por vírgula em 1 coluna

Transforme linhas separadas por vírgula em 1 coluna

Eu tenho uma lista de usuários basicamente de/etc/group, gostaria basicamente de formatar essa linha em uma coluna, só preciso dos usuários. Então, se um campo for assim:

bob,john,jane,sam,joyce

Então eu gostaria que ficasse assim

bob
john
jane
sam
joyce

Eu sei fazer o oposto, mas não desse tipo.

Responder1

Você pode fazer isso com sed:

sed 's/,/\n/g'

Isso substitui todas as ocorrências de ,por uma nova linha. gfaz com que o sed substitua todas as ocorrências em uma linha em vez de apenas a primeira.

Responder2

Para responder usando suas tags sugeridas:

festa:

$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce

estranho:

$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce

O $1=$1bit é uma expressão awk para reescrever o registro atual usando os Separadores de Campo de Saída, o que não acontece a menos que algum campo seja modificado.

Responder3

Você poderia fazer isso com localizar e substituir em vim:

:%s/,/\r/g

Veressepergunta...

Responder4

Se você quiser usar o awk (semelhante aoImprima todos os campos com AWK separados por OFS):

echo "bob,john,jane,sam,joyce" | awk  'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'

informação relacionada