Ich habe eine CSV-Datei wie diese:
abd,123,egypt,78
cde,456,england,45
Wie kann ich die Anzahl der Zeichen nur für die Wörter in der 3. Spalte ermitteln?
Ich kann nicht herausfinden, wie ich wc
dazu komme.
cut -d, -f3 | tr -d '\n' | wc -m
(Denken Sie daran, dass es sich um wc -c
Bytes handelt, nicht um Zeichen:
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wc
Befehl nicht verwenden , um eine Ausgabe zu erhalten!"wc
, mir die Anzahl der Zeichen zu geben, weshalb ich zeige, wie manwc
in diesem Kontext verwendet.quelle
awk
wurde für die zeilenweise Verarbeitung von spaltenbasierten Dateien entwickelt. Das Problem ist für das Werkzeug perfekt geeignet.0
anstelle einer leeren Zeile gedruckt werden, wenn die Eingabedatei leer ist.awk
) im typischen Unix-Geist mit dem Fall zusammenarbeiten (und gleichzeitig arbeiten). Sie werden feststellen, dass der Befehl cut + tr + wc 5-mal so schnell ist wie der Befehl awkperl
. (Zumindest auf meinem System, in einem UTF8-Gebietsschema, hat es mit einer 100-MB-Datei versucht).Eine
perl
Lösung:oder eine kürzere Version:
quelle
-Mopen=:locale
fürperl
den Benutzer / System-Definition von verwenden , was ein Zeichen ist, sonst nimmt sie Zeichen Bytes sind. Probieren Sie einea,1,españa,2
Eingabe in einem UTF-8-Gebietsschema aus (die Standardeinstellung auf den meisten Systemen).quelle
Sie könnten auch verwenden
quelle
In Perl:
quelle
Mit deiner Beispieldatei wie folgt:
Es
wc
kann schwierig sein, mit zu arbeiten, um die Anzahl der Zeilen zu ermitteln. Sie müssen es für jeden String aus Spalte 3 einzeln aufrufen, was es etwas schwierig macht, das zu tun, was Sie wollen. Sie müssen jede Zeile Ihrer CSV-Datei durchsehen, Spalte 3 extrahieren und dann anzeigenwc
, um die Anzahl der Zeichen zu ermitteln.quelle
Verwenden von
sed
undawk
Beispiel:
Zwei awks
Beispiel:
quelle