it-swarm.com.de

Mehrere Zeilen in eine Zeile mit Komma trennen (Perl / Sed / AWK)

Ich habe folgende Daten in mehreren Zeilen:

foo
bar
qux
zuu
sdf
sdfasdf

Was ich tun möchte, ist, sie mit einer Linie und Komma zu konvertieren, die getrennt werden:

foo,bar,qux,zuu,sdf,sdfasdf

Was ist der beste Unix-Einzeiler dafür?

75
neversaint

Einfügebefehl verwenden:

paste -d, -s file
128
Guru

datei

aaa
bbb
ccc
ddd

xargs

cat file | xargs

ergebnis

aaa bbb ccc ddd 

xargs verbessert

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

ergebnis

aaa,bbb,ccc,ddd 
63

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

Dies ist ein kürzerer Weg.

10

Es gibt viele Möglichkeiten, wie dies erreicht werden kann. Welches Tool Sie verwenden, hängt hauptsächlich von Ihren Vorlieben oder Ihrer Erfahrung ab.

Verwenden des Befehls tr:

tr '\n' ',' < somefile

Awk benutzen:

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

basierend auf Ihrem Eingabebeispiel funktioniert diese awk-Zeile. (ohne nachgestelltes Komma)

awk -vRS="" -vOFS=',' '$1=$1' file

prüfung:

kent$  echo "foo
bar
qux
zuu
sdf
sdfasdf"|awk -vRS="" -vOFS=',' '$1=$1' 
foo,bar,qux,zuu,sdf,sdfasdf
7
Kent

Perl Einzeiler:

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

oder, wenn Sie kryptischer sein wollen:

Perl '-peeof||chomp&&s/$/,/' file
6
choroba
Perl -pi.bak -e 'unless(eof){s/\n/,/g}' your_file

Dadurch wird eine Sicherungskopie der Originaldatei mit der Erweiterung .bak erstellt und anschließend die Originaldatei geändert

1
Vijay
sed -n 's/.*/&,/;H;$x;$s/,\n/,/g;$s/\n\(.*\)/\1/;$s/\(.*\),/\1/;$p'
1
protist