Konvertieren .txt Datei zu .csv mit header in der bash
.txt sieht so aus:
2013-04-10;248179;5431;5375.30€;1.49
..
..
..
Brauche ich eine .csv-Datei mit einem Header:
Date Visit Login Euro Rate
2013-04-10 248179 5431 5375.30€ 1.49
.. .. .. .. ..
.. .. .. .. ..
Gibt es einen Weg, um dieses Ergebnis mit der BASH?
- was ist der separator auf die
.csv
- Datei?tab
? - CSV ist 'comma separated values'...das Trennzeichen für die CSV-Datei ein Komma. Zugegeben, das layout gezeigt, die vermuten lässt ist es ein TSV (tab separated values) - Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies sollte es tun, wenn Ihre Felder enthalten keine zicken:
Müssen Sie nur geben Sie einen tab buchstäblich in der bash (^V TAB). Wenn Ihre version von sed unterstützt, können Sie schreiben
\t
statt einer wörtlichen tab.bash
(und anderen Muscheln, die es unterstützen), können Sie die spezielle zitiert$'s/;/\t/g'
auch wenn Ihrsed
nicht unterstützen\t
.Können Sie awk :
Den
{$1=$1}1
ist ein trick, um zu erzwingen, das neue Feld Trennzeichen.echo
mit der-e
Kräfte, die das tab-Zeichen interpretiert werden als tab.Edit : geändert pipe | zu & und dann ;
echo
ist gerichtet auf die Datei, undawk
gegeben ist eine Datei zum Lesen und ignoriert seine standard-Eingabe.&
, da ist das echo fast vollständig immeditely; nur ein Semikolon verwenden.{ echo ...; awk ...; } > newfile
wo, wenn Sie halten Sie es auf einer Zeile (wie in einem Kommentar) Sie benötigen beide, Semikolon, aber wenn Sie verteilt sich über 4 Zeilen (die geschweiften Klammern auf eine Linie auf Ihre eigenen, mit dem I/O-Umleitung nach der zweiten), dann brauchen Sie keine Semikolons.BEGIN
block in dem Aufrufawk
zum drucken der Kopfzeile.Dies ist ein reines bash-Lösung.Speichern Sie die Header in einem array und set
IFS
zutab
und dannecho
den Kopf. In einer Schleife durch die Datei mit lese -, SatzIFS
zu;
auf dem Weg in, setIFS
zutab
und führenecho
auf dem Weg nach draußen.