Tengo un archivo CSV como este:
abd,123,egypt,78
cde,456,england,45
¿Cómo puedo obtener el recuento de caracteres de solo las palabras de la tercera columna?
No puedo entender cómo wc
hacer esto.
Tengo un archivo CSV como este:
abd,123,egypt,78
cde,456,england,45
¿Cómo puedo obtener el recuento de caracteres de solo las palabras de la tercera columna?
No puedo entender cómo wc
hacer esto.
Respuestas:
cut -d, -f3 | tr -d '\n' | wc -m
(recuerde que wc -c
cuenta bytes, no caracteres:
$ 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
darme el recuento de caracteres, por eso muestro cómo usarlo wc
en este contexto.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
fue diseñado para procesar archivos basados en columnas, línea por línea. El problema se adapta perfectamente a la herramienta.
0
lugar de una línea vacía cuando el archivo de entrada está vacío.
awk
) cooperando con el caso (trabajando simultáneamente) en el espíritu típico de Unix. Puede notar cómo el cut + tr + wc one es 5 tipos tan rápido como este awk one 5 veces más rápido que el anterior perl
. (al menos en mi sistema, en un entorno local UTF8, probé en un archivo de 100 MB).
Una perl
solución:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
o una versión más corta:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
para perl
utilizar el / definición del sistema del usuario de lo que un personaje es, de lo contrario se asume caracteres son bytes. Pruebe una a,1,españa,2
entrada en un entorno local UTF-8 (el valor predeterminado en la mayoría de los sistemas).
Con su archivo de muestra así:
$ 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
Trabajar con wc
para obtener el recuento de cada línea puede ser complicado. Debe llamarlo para cada cadena desde la columna 3 individualmente, lo que hace que sea un poco difícil hacer lo que desea. Tienes que mirar a través de cada fila de tu CSV, extraer la columna 3 y luego presentarla wc
para obtener el recuento de caracteres.
Usando sed
yawk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
Ejemplo:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
Dos awk's
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
Ejemplo:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
comando para obtener resultados!'