Há também xargs
e sed
:
$ xargs <input.txt | sed -e 's/ /,/g'
EN1,EN2,EN3,EN4,EN5
Uma vantagem aqui é que não há uma vírgula à direita para se livrar.
xargs
para combinar as linhas de entrada, sed
para substituir todos os espaços por vírgulas. Eu uso isso rotineiramente para construir expressões regulares (substituir espaços com |
) e somas rápidas para pipe em bc
(substituir espaços com +
).
(FYI xargs
é padronizado como echo
como o comando, se nenhum for fornecido)
NOTA: Isso só funciona se o arquivo de entrada for como descrito (um campo por linha, sem espaços). Se houver mais campos e / ou espaços na entrada, você poderá usar o awk ou o sed para pré-processar a entrada. Por exemplo, com entradas como esta:
EN1 foo bar
EN2 bar foo
EN3 baz quux
EN4 abc def
EN5 hij klm
Aqui o awk é usado para extrair apenas o primeiro campo:
$ awk '{print $1}' input.txt | xargs | sed -e 's/ /,/g'
EN1,EN2,EN3,EN4,EN5
Neste segundo exemplo (sed), os espaços na entrada original são substituídos por alguma outra string (escolhida como não sendo provável na entrada original), então alimentada em xargs. sed, em seguida, substitui os espaços adicionados por xargs e, em seguida, restaura as seqüências de caracteres da entrada:
$ sed -e 's/ /--space--/g' input.txt | xargs | sed -e 's/ /,/g' -e 's/--space--/ /g'
EN1 foo bar,EN2 bar foo,EN3 baz quux,EN4 abc def,EN5 hij klm
Agora, para alguns comentários gratuitos sobre artigos de opinião:
Um dos conhecimentos mais úteis sobre ferramentas de processamento de texto unix é que você pode e deve pensar que os dados são quase infinitamente maleáveis - você pode transformá-los na forma que precisar, seja para fornecer informações a outro processo ou para produzir a saída que você quer ou ambos.
Isso é parte da razão pela qual as pessoas unix tendem a odiar formatos de dados proprietários - não é apenas uma desaprovação filosófica ou um desejo de evitar o aprisionamento de fornecedores, é também o fato muito pragmático de que eles dificultam manipular e usar nossos dados de maneiras que não foram previstas pelos desenvolvedores do software.