Analysieren Sie eine CSV-Datei einige der Werte zu extrahieren, aber nicht alle
Frage
Guten Tag
Ich habe eine lokale CSV-Datei mit Werten, die Änderung aufgerufen täglich DailyValues.csv
Ich brauche den Wert Feld category2 und category4 zu extrahieren.
Dann kombinieren, sortieren und Duplikate entfernen (falls vorhanden) aus den extrahierten Werten.
dann speichern Sie es auf eine neue lokale Datei NewValues.txt.
Hier ist ein Beispiel für die DailyValues.csv-Datei:
category,date,value
category1,2010-05-18,value01
category1,2010-05-18,value02
category1,2010-05-18,value03
category1,2010-05-18,value04
category1,2010-05-18,value05
category1,2010-05-18,value06
category1,2010-05-18,value07
category2,2010-05-18,value08
category2,2010-05-18,value09
category2,2010-05-18,value10
category2,2010-05-18,value11
category2,2010-05-18,value12
category2,2010-05-18,value13
category2,2010-05-18,value14
category2,2010-05-18,value30
category3,2010-05-18,value16
category3,2010-05-18,value17
category3,2010-05-18,value18
category3,2010-05-18,value19
category3,2010-05-18,value20
category3,2010-05-18,value21
category3,2010-05-18,value22
category3,2010-05-18,value23
category3,2010-05-18,value24
category4,2010-05-18,value25
category4,2010-05-18,value26
category4,2010-05-18,value10
category4,2010-05-18,value28
category4,2010-05-18,value11
category4,2010-05-18,value30
category2,2010-05-18,value31
category2,2010-05-18,value32
category2,2010-05-18,value33
category2,2010-05-18,value34
category2,2010-05-18,value35
category2,2010-05-18,value07
Ich habe einige hilfreiche Parsing Beispiele unter http: // www. php.net/manual/en/function.fgetcsv.php und verwalten alle die Werte des Spalts Wert zu extrahieren, aber nicht wissen, wie es zu beschränken nur die Werte von category2 / 4 dann sortieren und sauber zu extrahieren duplizieren.
Die Lösung Bedürfnisse in PHP, Perl oder Shell-Skript sein.
Jede Hilfe wäre sehr geschätzt.
Vielen Dank im Voraus.
Lösung
Hier ist eine Shell-Skript-Lösung.
egrep 'category4|category2' input.file | cut -d"," -f1,3 | sort -u > output.file
verwendete ich den Befehl cut
nur um Ihnen zu zeigen, dass Sie nur bestimmte Spalten extrahieren kann, da der f
Schalter für Schnitt wählt, die Spalten, die Sie extrahieren möchten.
Der u
Schalter für Art macht den Ausgang eindeutig sein.
Edit:
Es ist wichtig, dass Sie egrep
verwenden und nicht grep
, da grep
einen etwas eingeschränkten regulären Ausdruck Satz verwendet, und egrep hat etwas weitere Einrichtungen
Edit (für Leute, die nur zur Verfügung haben grep):
grep 'category2' input.file > temp.file && grep 'category4' input.file >> temp.file && cut temp.file -d"," -f1,3 | sort -u > output.file && rm temp.file
Es produziert einen ganz Overhead, aber noch funktioniert ...