Você pode fazer isso com o sed:
sed 's/,/\n/g'
Isso substitui todas as ocorrências de ,
por uma nova linha. g
faz sed substituir todas as ocorrências em uma linha em vez de apenas a primeira.
Eu tenho uma lista de usuários basicamente de / etc / group, eu gostaria basicamente de formatar essa linha em uma coluna, eu só preciso dos usuários. Então, se um campo se parece com isso:
bob,john,jane,sam,joyce
Então eu gostaria que parecesse com isso
bob
john
jane
sam
joyce
Eu sei fazer o oposto, mas não esse tipo.
Algumas opções:
tr :
tr ',' '\n' < [input file] > [output file]
tr é uma ferramenta que filtra sua entrada padrão e substitui todas as ocorrências de um caractere de seu primeiro argumento pelo correspondente do segundo elemento, depois imprime para o padrão.
vim / ex (isso funcionará em um script):
vim -c "%s/,/\r/g" -c "wq" [input file]
A opção -c diz ao vim para executar o seguinte comando ex
(o mesmo que você digitaria depois de um :
ao usar o vim normalmente).
E alguém já me bateu para sed
Para responder usando suas tags sugeridas:
bash:
$ 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
O $1=$1
bit é um idioma do awk para reescrever o registro atual usando os Separadores do Campo de Saída, o que não acontece a menos que algum campo seja modificado.
Se você quiser usar o awk (semelhante a Imprimir todos os campos com AWK separados por OFS ):
echo "bob,john,jane,sam,joyce" | awk 'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'