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 wchacer 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 wchacer esto.
Respuestas:
cut -d, -f3 | tr -d '\n' | wc -m
(recuerde que wc -ccuenta 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
)
wcdarme el recuento de caracteres, por eso muestro cómo usarlo wcen este contexto.
awk -F, '{sum+=length($3)}; END {print +sum}' file
awkfue diseñado para procesar archivos basados en columnas, línea por línea. El problema se adapta perfectamente a la herramienta.
0lugar 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 perlsolució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=:localepara perlutilizar 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,2entrada 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 wcpara 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 wcpara obtener el recuento de caracteres.
Usando sedyawk
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
wccomando para obtener resultados!'