it-swarm.com.de

Wie bekomme ich die erste Spalte jeder Zeile aus einer CSV-Datei?

Wie kann die erste Spalte jeder Zeile in einer CSV-Eingabedatei abgerufen und in eine neue Datei ausgegeben werden? Ich denke mit awk nach, weiß aber nicht wie.

25
Junba Tester

Versuche dies:

 awk -F"," '{print $1}' data.txt

Es wird jede Eingabezeile in der Datei data.txt in verschiedene Felder auf der Basis von ,-Zeichen (wie mit dem -F angegeben) aufgeteilt und das erste Feld (Spalte) an stdout drucken.

55
Levon

Kann gemacht werden:

$ cut -d, -f1 data.txt
49
user647772

Eingabe  

a,12,34
b,23,56

Code  

awk -F "," '{print $1}' Input

Format

awk -F <delimiter> '{print $<column_number>}' Input
6
Debaditya
echo "a,b,c" | cut -d',' -f1 > newFile
6
Nykakin

Dies kann mit grep erreicht werden:

$ grep -o '^[^,]\+' file.csv
3
kenorb

Perl verwenden:

Perl -F, -lane 'print $F[0]' data.txt > data2.txt

Diese Befehlszeilenoptionen werden verwendet: 

  • -n Schleife um jede Zeile der Eingabedatei
  • -l entfernt Zeilenumbrüche vor der Verarbeitung und fügt sie anschließend wieder ein 
  • -a autosplit mode - teilt die Eingabezeilen in das @F-Array auf. Standardmäßig wird das Leerzeichen geteilt. 
  • -e den Perlcode ausführen 
  • -F autosplit-Modifizierer, in diesem Fall wird nach , aufgeteilt 

Wenn Sie Ihre Originaldatei direkt ändern möchten, verwenden Sie die Option -i:

Perl -i -lane 'print $F[0]' data.txt


Wenn Sie Ihre Originaldatei vor Ort ändern und eine Sicherungskopie erstellen möchten:

Perl -i.bak -lane 'print $F[0]' data.txt


Wenn Ihre Daten durch Leerzeichen getrennt sind und nicht durch Kommas getrennt sind:

Perl -lane 'print $F[0]' data.txt

0
Chris Koknat