GNU/Linux >> Tutoriels Linux >  >> Linux

Déterminer la longueur de colonne maximale pour chaque colonne dans un fichier CSV simplifié (une ligne par ligne) ?

Pour déterminer la longueur maximale de chaque colonne dans un fichier csv séparé par des virgules, j'ai piraté un script bash. Lorsque je l'ai exécuté sur un système Linux, il a produit la sortie correcte, mais j'en ai besoin pour fonctionner sur OS X et il s'appuie sur la version GNU de wc qui peut être utilisé avec le paramètre -L pour --max-line-length .

La version de wc sur OSX ne prend pas en charge cette option spécifique et je recherche une alternative.

Mon script (qui n'est pas si bon - cela reflète mes faibles compétences en script, je suppose):

#!/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

Qui imprime :

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

Pour mon fichier test :

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

Je sais que l'installation de GNU CoreUtils via Homebrew pourrait être une solution, mais ce n'est pas une voie que je veux emprunter car je suis sûr qu'elle peut être résolue sans modifier le système.

Réponse acceptée :

pourquoi ne pas utiliser awk ?

Je n'ai pas de mac à tester, mais length() est une fonction assez standard dans awk, donc cela devrait fonctionner.

fichier 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] ;
}

puis lancez

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

Linux
  1. ^M à la fin de chaque ligne dans vim

  2. Comment lister un nom de fichier par ligne de sortie sous Linux ?

  3. Serveur FTP sur une ligne

  4. Séparateur de champ par défaut pour awk

  5. Conversion d'une jolie impression JSON en une seule ligne

8 conseils pour la ligne de commande Linux

Outil de ligne de commande robuste pour le traitement des fichiers CSV ?

Exécuter une ligne de commandes avec One Sudo ?

Une doublure pour vérifier si le fichier existe ?

Vérification des conditions d'une ligne dans le fichier Makefile ?

La boucle Bash FOR expliquée et simplifiée