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.
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.
Antworten:
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
, mir die Anzahl der Zeichen zu geben, weshalb ich zeige, wie man wc
in diesem Kontext verwendet.
awk -F, '{sum+=length($3)}; END {print +sum}' file
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 awk perl
. (Zumindest auf meinem System, in einem UTF8-Gebietsschema, hat es mit einer 100-MB-Datei versucht).
Eine perl
Lösung:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
oder eine kürzere Version:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
für perl
den Benutzer / System-Definition von verwenden , was ein Zeichen ist, sonst nimmt sie Zeichen Bytes sind. Probieren Sie eine a,1,españa,2
Eingabe in einem UTF-8-Gebietsschema aus (die Standardeinstellung auf den meisten Systemen).
Mit deiner Beispieldatei wie folgt:
$ cat sample.txt
abd,123,egypt,78
cde,456,england,45
$ awk -F, '{print $3}' sample.txt | while read i; do echo "$i" | \
tr -d '\n' | wc -m; done
5
7
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 anzeigen wc
, um die Anzahl der Zeichen zu ermitteln.
Verwenden von sed
undawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Beispiel:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
Zwei awks
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Beispiel:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
Befehl nicht verwenden , um eine Ausgabe zu erhalten!"