98 votes

En tournant plusieurs lignes en une seule ligne, séparés par des virgules (Perl/Sed/AWK)

J'ai les données suivantes dans plusieurs lignes:

foo
bar
qux
zuu
sdf
sdfasdf

Ce que je veux faire est de les convertir en une ligne et séparés par des virgules:

foo,bar,qux,zuu,sdf,sdfasdf

Quelle est la meilleure unix one-liner pour le faire?

171voto

Guru Points 7050

En utilisant la pâte de commande:

paste -d, -s file

87voto

fichier

aaa
bbb
ccc
ddd

xargs

cat file | xargs

résultat

aaa bbb ccc ddd 

xargs improoved

cat file | xargs | sed -e 's/ /,/g'

résultat

aaa,bbb,ccc,ddd 

12voto

n3rV3 Points 649

Il existe de nombreuses façons de la réaliser. L'outil que vous utilisez dépend principalement de votre propre préférence ou de l'expérience.

À l'aide de tr commande:

tr '\n' ',' < somefile

Utilisation de awk:

awk -F'\n' '{if(NR == 1) {printf $0} else {printf ","$0}}' somefile

10voto

xargs -a your_file | sed 's/ /,/g'

c'est le plus court chemin

6voto

choroba Points 56333

Perl one-liner:

perl -pe'chomp, s/$/,/ unless eof' file

ou, si vous voulez être plus cryptique:

perl '-peeof||chomp&&s/$/,/' file

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X