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.
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
)
wccomando para obtener resultados!'wcdarme el recuento de caracteres, por eso muestro cómo usarlowcen este contexto.fuente
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 anteriorperl. (al menos en mi sistema, en un entorno local UTF8, probé en un archivo de 100 MB).Una
perlsolución:o una versión más corta:
fuente
-Mopen=:localeparaperlutilizar el / definición del sistema del usuario de lo que un personaje es, de lo contrario se asume caracteres son bytes. Pruebe unaa,1,españa,2entrada en un entorno local UTF-8 (el valor predeterminado en la mayoría de los sistemas).fuente
También podrías usar
fuente
En perl:
fuente
Con su archivo de muestra así:
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 presentarlawcpara obtener el recuento de caracteres.fuente
Usando
sedyawkEjemplo:
Dos awk's
Ejemplo:
fuente