GNU/Linux >> Belajar Linux >  >> Linux

Tentukan Panjang Kolom Maksimum Untuk Setiap Kolom Dalam File Csv Sederhana (satu Baris Per Baris)?

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

Linux
  1. ^M di akhir setiap baris di vim

  2. Bagaimana cara mendaftar satu nama file per baris keluaran di Linux?

  3. Server FTP Satu Jalur

  1. Panjang maksimum argumen baris perintah yang dapat diteruskan ke SQL*Plus?

  2. menggunakan awk dengan kondisi nilai kolom

  3. perintah cut atau awk untuk mencetak bidang pertama dari baris pertama

  1. Grep:hitung jumlah kecocokan per baris

  2. Tetapkan kecepatan maksimum untuk scp

  3. Panjang maksimum perintah Crontab