Lesen einer CSV-Datei in bash
Habe ich eine Anforderung zum Lesen der CSV-Datei in der shell, und ich bin ok mit der CSV-Datei mit einer einzigen Zeile in einer Zelle. Aber wenn wir mehrere Linien in der Zelle der CSV-Datei, dann bin ich nicht in der Lage, um die CSV-Datei an.
Filename Lines
/etc/hosts example.test.com
example2.test.com
/etc/resolv.conf nameserver dns.test.com
search test.com
Werde ich nehmen Eingaben vom Benutzer in eine CSV-Datei und hinzufügen der gegebenen geraden um die erwähnten Dateien. Hier gibt es mehrere Linien, die in jeder Zelle der CSV-Datei und Wenn ich versuche zu cat die Datei es geben, in einer anderen Reihenfolge.
[user2@mon ~]$ cat test2.csv
"Filename","Lines"
"/etc/hosts","example.test.com"
,"example2.test.com"
"/etc/resolv.conf","nameserver dns.test.com"
,"search test.com"
Gibt es irgendeine Art, wie wir Lesen können, die mehrere Zeilen aus der Datei und die Anzahl der Zeilen ist nicht dasselbe, die ganze Zeit.
- stackoverflow.com/questions/1560393/...
- Die Daten-Datei ist gegeben; was willst du tun in
bash
? Formatieren Sie es, wie gezeigt, auf der standard-Ausgabe? Oder Versteck die Daten in einembash
array? Oder etwas anderes? - stackoverflow.com/questions/12739515
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte dies sein, was Sie nach:
Kann es gut möglich sein, komprimieren Sie die Ersatz-Operationen, wenn Sie verbringen mehr Zeit im manual-bashing. Diese ist fragil wie eine Lösung (die meisten Lösungen nicht mithilfe von code speziell für den Umgang mit CSV-format sind zerbrechlich); scheitert es schrecklich, wenn ein Komma erscheint innerhalb der quote-geschlossene Felder.
Angewandt, um Ihre Daten, es ergibt sich:
Andere mögliche Werkzeuge zum Bearbeiten CSV-format Daten zuverlässig sind:
csvfix
.Wenn das ist nicht, was Sie suchen, bitte klären Sie die Frage stellen.
csvfix
Programm ist in C++ geschrieben und kann viele sehr nützliche tricks; ich bin mir nicht sicher, ob es gelingen würde Zeile 79, Spalte 4, obwohl (aber es könnte auch so tun).perl -MText::CSV -e '$csv=Text::CSV->new({binary=>1})or die;while(my$row=$csv->getline(STDIN)){print"$row->[1]\n"; }' <data
. Getestet auf Ihre Daten; erzeugt die Ausgabe der Spalte 2.gsub( "\"", "" )
Field1 Field2
und wenn ich den awk Befehl alsawk '{print $2}'
dann wird es mir als output Feld2, so wie ich, sollte sich die Ausgabe alsexample.test.com \n example2.test.com
für die Datei /etc/hosts Datei und es sollte die Ausgabe wienameserver dns.test.com \n search test.com
für /etc/resolv.conf. Der input wird gegeben werden aus der excel-Tabelle in ein csv-format und mehrere Zeilen in eine einzige Zelle-und out-Skript sollte auch behandeln Sie Sie als single.Vorausgesetzt, Ihr Eingang ist so einfach wie dein Beispiel, Sie könnten in der Lage sein, um Weg mit einfach zu tun: