Frage

Ich habe mit Textdateien in einer bunten Auswahl von Formaten beschäftigen. Hier ist ein Beispiel (Spalten A und B ist Tabulator getrennt):

A   B
a   Name1=Val1, Name2=Val2, Name3=Val3
b   Name1=Val4, Name3=Val5
c   Name1=Val6, Name2=Val7, Name3=Val8

Die Dateien könnten Header haben oder nicht, haben abgrenzt Schemata gemischt, haben Spalten mit Name / Wert-Paare wie oben usw.
Ich habe oft die Ad-hoc-Daten aus solchen Dateien auf verschiedene Weise zu extrahieren. Zum Beispiel aus den obigen Daten kann ich den Wert mit Name2 zugeordnet werden soll, wo es vorhanden ist. d.

A   B
a   Val2
c   Val7

Welche Werkzeuge / Techniken gibt es zur Durchführung einer solchen Manipulationen als eine Zeilenbefehle, unter Verwendung der oben als Beispiel aber erweiterbar auf andere Fälle?

War es hilfreich?

Lösung

Ich mag nicht zu viel sed, aber es funktioniert für solche Dinge:

var="Name2";sed -n "1p;s/\([^ ]*\) .*$var=\([^ ,]*\).*/\1 \2/p" < filename

Gibt Ihnen:

 A B
 a Val2
 c Val7

Andere Tipps

Sie haben alle grundlegenden bash-Shell-Befehle, zum Beispiel grep, schneiden, sed und awk zur Verfügung. Sie können auch Perl oder Ruby für komplexere Dinge verwenden.

Von dem, was ich gesehen habe ich mit Awk für diese Art der Sache beginnen würde und dann, wenn Sie etwas komplexer brauchen, würde ich zu Python Fortschritt.

Ich würde verwenden sed:

   # print section of file between two regular expressions (inclusive)
   sed -n '/Iowa/,/Montana/p'             # case sensitive

Da Sie Cygwin haben, würde ich mit Perl gehen. Es ist die einfachste des O'Reily Buch zu lernen (check out: Learning Perl ) und breit anwendbar.

Ich würde Perl verwenden. Schreibe ein kleines Modul (oder mehr) für die unterschiedlichen Formate handeln. Sie könnten dann Perl Einzeiler laufen diese Bibliothek verwenden. Beispiel für das, was würde es aussehen wie folgt:

perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'

zitieren Sie mich nicht auf die Syntax, aber das ist die allgemeine Idee. Zusammenfassung der Aufgabe in der Hand, damit Sie in Bezug auf die denken, was Sie tun müssen, nicht, wie Sie es tun müssen. Rubin wäre eine weitere Option, es neigt dazu, eine sauberere Syntax zu haben, aber entweder Sprache funktionieren würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top