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.
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
comando para obtener resultados!'wc
darme el recuento de caracteres, por eso muestro cómo usarlowc
en este contexto.fuente
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 anteriorperl
. (al menos en mi sistema, en un entorno local UTF8, probé en un archivo de 100 MB).Una
perl
solución:o una versión más corta:
fuente
-Mopen=:locale
paraperl
utilizar 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,2
entrada 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
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 presentarlawc
para obtener el recuento de caracteres.fuente
Usando
sed
yawk
Ejemplo:
Dos awk's
Ejemplo:
fuente