GNU/Linux >> Znalost Linux >  >> Linux

Určit maximální délku sloupce pro každý sloupec ve zjednodušeném souboru CSV (jeden řádek na řádek)?

Abych určil maximální délku každého sloupce v souboru csv odděleném čárkami, hacknul jsem dohromady bash-script. Když jsem to spustil na linuxovém systému, produkoval správný výstup, ale potřebuji, aby běžel na OS X a spoléhá na GNU verzi wc který lze použít s parametrem -L pro --max-line-length .

Verze wc na OSX tuto konkrétní možnost nepodporuje a já hledám alternativu.

Můj scénář (který není tak dobrý – myslím, že odráží mé špatné skriptovací schopnosti):

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

Které se vytisknou:

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

Pro můj testovací soubor:

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

Vím, že instalace GNU CoreUtils přes Homebrew může být řešením, ale to není cesta, kterou bych se chtěl vydat, protože jsem si jistý, že ji lze vyřešit bez úprav systému.

Přijatá odpověď:

proč nepoužít awk?

Nemám mac na testování, ale length() je v awk docela standardní funkce, takže by to mělo fungovat.

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

pak spusťte

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

Linux
  1. ^M na konci každého řádku ve vim

  2. Maximální délka argumentu příkazového řádku, který lze předat SQL*Plus?

  3. pomocí awk s podmínkami hodnoty sloupce

  1. příkaz cut nebo awk pro tisk prvního pole prvního řádku

  2. Grep:počítání počtu zápasů na řádek

  3. určit ulimit pro uživatele root

  1. 8 tipů pro příkazový řádek Linuxu

  2. Vykonat řadu příkazů jedním sudem?

  3. Existuje jedna vložka ke kontrole souboru?