2009-09-08 6 views
13

schneiden Ich habe eine Reihe von CSV-Dateien (ca. 250), die jeweils 300 bis 500 Datensätze. Ich muss 2 oder 3 Spalten von jeder Datei schneiden und sie zu einer anderen speichern. Ich benutze ubuntu OS. Gibt es eine Möglichkeit, es in Befehl oder Dienstprogramm zu tun?wie Spalten von csv

Antwort

22

Wenn Sie wissen, dass das Spaltentrennzeichen nicht in den Feldern vorkommt, können Sie cut verwenden.

$ cat in.csv 
foo,bar,baz 
qux,quux,quuux 
$ cut -d, -f2,3 < in.csv 
bar,baz 
quux,quuux 

Sie können die Schale buildin ‚für‘ Schleife über alle Eingabedateien verwenden.

+2

Sie können alle Dateien mit etwas wie: "* .csv" | scalable verarbeiten xargs cut -d, -f2,3> out.csv – pixelbeat

+2

Sie können die Option '--output-delimiter = STRING' von' cut' verwenden, wenn Sie das Komma loswerden oder es in etwas anderes ändern möchten. –

+14

Das Hauptproblem bei dieser Antwort ist, dass 'cut' nicht mit Feldern in Anführungszeichen arbeitet, die das Trennzeichen enthalten. Wenn Ihre CSV-Datei über Daten verfügt, die dies tun, müssen Sie etwas anderes verwenden. –

9

Wenn die Felder das Trennzeichen enthalten könnten, sollten Sie eine Bibliothek finden, die CSV-Dateien analysieren kann. In der Regel enthalten Skriptsprachen für allgemeine Zwecke ein CSV-Modul in ihrer Standardbibliothek.

Ruby: require 'csv' 
Python: import csv 
Perl: use Text::ParseWords; 
8

Wenn Ihre Felder Kommas oder Zeilenumbrüche enthalten, können Sie ein Hilfsprogramm verwenden ich schrieb Schnitt (und andere UNIX-Textverarbeitungs-Tools), damit ordnungsgemäß mit den Daten arbeiten.

https://github.com/dbro/csvquote

Dieses Programm findet Sonderzeichen innerhalb zitierte Felder, und ersetzt sie vorübergehend mit Zeichen nicht druckbare, die den Schnitt Programm nicht verwirren. Dann werden sie wiederhergestellt, nachdem der Schnitt abgeschlossen ist.

lutz‘Lösung würde:

csvquote in.csv | cut -d, -f2,3 | csvquote -u 
+0

Ja, es hat sehr gut für mich funktioniert: https://stackoverflow.com/questions/17199311/how-to-delete-a-column-columns-of-a-csv-file-which-has-cell-values-with -a-string/29134579 # 29134579 – nono

0

Wenn Sie ssconvert verwendet, um die CSV zu erhalten Sie könnten versuchen:

ssconvert -O 'separator="|"' "file.xls" "file.txt" 

Beachten Sie die TXT Erweiterung statt CSV, auf diese Weise wird Verwenden Sie Gnumeric_stf: stf_assistant Exporteur anstelle von Gnumeric_stf: stf_csv, mit dem Sie Optionen (-O Parameter) verwenden können. Andernfalls erhalten Sie eine Der Dateischoner nimmt keine Optionen Fehler. Pfeifencharakter ist viel unwahrscheinlicher, aber du solltest vorher nachsehen.

Dann können Sie es umbenennen und Dinge tun, wie:

cat file.csv | cut -d "|" -f3 | sort | uniq -c | sort -rn | head 
Verwandte Themen