GNU/Linux >> Linux Esercitazione >  >> Linux

Determinare la lunghezza massima della colonna per ogni colonna in un file CSV semplificato (una riga per riga)?

Per determinare la lunghezza massima di ogni colonna in un file CSV separato da virgole ho hackerato insieme uno script bash. Quando l'ho eseguito su un sistema Linux ha prodotto l'output corretto, ma ho bisogno che funzioni su OS X e si basa sulla versione GNU di wc utilizzabile con il parametro -L per --max-line-length .

La versione di wc su OSX non supporta quell'opzione specifica e sto cercando un'alternativa.

La mia sceneggiatura (che non è così buona, riflette le mie scarse capacità di sceneggiatura):

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

Quali stampe:

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

Per il mio file di prova:

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

So che l'installazione di GNU CoreUtils tramite Homebrew potrebbe essere una soluzione, ma non è un percorso che voglio intraprendere perché sono sicuro che può essere risolto senza modificare il sistema.

Risposta accettata:

perché non usare awk?

Non ho un Mac da testare, ma length() è una funzione piuttosto standard in awk, quindi dovrebbe funzionare.

awk file:

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

quindi esegui

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

Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Strumento da riga di comando robusto per l'elaborazione di file CSV?

  3. Eseguire una linea di comandi con un sudo?

  4. Come modificare la lunghezza della linea predefinita per Od e Hexdump?

  5. Esiste una riga per verificare la presenza di file?

Il ciclo Bash FOR spiegato e semplificato

^M alla fine di ogni riga in vim

Server FTP a una linea

comando cut o awk per stampare il primo campo della prima riga

determinare ulimit per l'utente root

Lunghezza massima del comando Crontab