Transforme as linhas separadas por vírgula em uma coluna

2

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.

    
por unixpipe 04.09.2014 / 18:08

5 respostas

3

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.

    
por 04.09.2014 / 19:15
0

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

:%s/,/\r/g

Veja esta pergunta. .

    
por 04.09.2014 / 18:28
0

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

    
por 04.09.2014 / 19:29
0

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.

    
por 04.09.2014 / 19:41
0

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}'
    
por 04.09.2014 / 19:41

Tags