Untuk menentukan panjang maksimum setiap kolom dalam file csv yang dipisahkan koma, saya meretas skrip bash. Ketika saya menjalankannya di sistem linux, itu menghasilkan output yang benar, tetapi saya membutuhkannya untuk berjalan di OS X dan itu bergantung pada versi GNU dari wc
yang dapat digunakan dengan parameter -L
untuk --max-line-length
.
Versi wc
di OSX tidak mendukung opsi khusus itu dan saya sedang mencari alternatif.
Skrip saya (yang tidak terlalu bagus – saya kira itu mencerminkan keterampilan skrip saya yang buruk):
#!/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
Yang dicetak:
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
Untuk file pengujian saya:
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
Saya tahu menginstal GNU CoreUtils melalui Homebrew mungkin merupakan solusi, tetapi itu bukan jalan yang ingin saya ambil karena saya yakin itu dapat diselesaikan tanpa memodifikasi sistem.
Jawaban yang Diterima:
mengapa tidak menggunakan awk ?
Saya tidak memiliki mac untuk diuji, tetapi length() adalah fungsi yang cukup standar di awk, jadi ini akan berfungsi.
file 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] ;
}
lalu jalankan
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4