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 wcdazu 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 wcdazu komme.
Antworten:
cut -d, -f3 | tr -d '\n' | wc -m
(Denken Sie daran, dass es sich um wc -cBytes 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 wcin diesem Kontext verwendet.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awkwurde für die zeilenweise Verarbeitung von spaltenbasierten Dateien entwickelt. Das Problem ist für das Werkzeug perfekt geeignet.
0anstelle 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 perlLö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=:localefür perlden Benutzer / System-Definition von verwenden , was ein Zeichen ist, sonst nimmt sie Zeichen Bytes sind. Probieren Sie eine a,1,españa,2Eingabe 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 wckann 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 sedundawk
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
wcBefehl nicht verwenden , um eine Ausgabe zu erhalten!"