GNU/Linux >> Tutoriales Linux >  >> Linux

¿Determinar la longitud máxima de columna para cada columna en un archivo CSV simplificado (una línea por fila)?

Para determinar la longitud máxima de cada columna en un archivo csv separado por comas, armé un script bash. Cuando lo ejecuté en un sistema Linux, produjo la salida correcta, pero necesito que se ejecute en OS X y depende de la versión GNU de wc que se puede usar con el parámetro -L para --max-line-length .

La versión de wc en OSX no es compatible con esa opción específica y estoy buscando una alternativa.

Mi guión (que no es tan bueno, supongo que refleja mis pobres habilidades de guión):

#!/bin/bash

for((i=1;i< `head -1 $1|awk '{print NF}' FS=,`+1 ;i++));
    do echo  | xargs echo -n "Column$i: " && 
    cut -d, -f $i $1 |wc -L  ; done

Que imprime:

Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3

Para mi archivo de prueba:

123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343

Sé que instalar GNU CoreUtils a través de Homebrew podría ser una solución, pero ese no es el camino que quiero tomar, ya que estoy seguro de que se puede resolver sin modificar el sistema.

Respuesta aceptada:

¿Por qué no usar awk?

No tengo una Mac para probar, pero length() es una función bastante estándar en awk, por lo que debería funcionar.

archivo awk:

 { for (i=1;i<=NF;i++) {
    l=length($i) ;
    if ( l > linesize[i] ) linesize[i]=l ;
  }
}
END {
    for (l in linesize) printf "Columen%d: %dn",l,linesize[l] ;
}

entonces corre

mybox$ awk -F, -f test.awk  a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4

Linux
  1. ^M al final de cada línea en vim

  2. usando awk con condiciones de valor de columna

  3. comando cut o awk para imprimir el primer campo de la primera fila

  4. Separador de campo predeterminado para awk

  5. determinar ulimit para usuario root

¿Herramienta robusta de línea de comandos para procesar archivos Csv?

¿Ejecutar una línea de comandos con un Sudo?

¿Cómo cambiar la longitud de línea predeterminada para Od y Hexdump?

¿Existe un delineador para verificar el archivo?

¿Verificación de condición de una línea en Makefile?

El Bash FOR Loop explicado y simplificado