Parsing CSV di bash dan tetapkan variabel

Saya memiliki format csv (Bekerja pada Bash di linux)

DN , MAC , Partition ,  

123 , abc , xyz  
321 , asd , asd 

Saya dapat menguraikannya menggunakan awk dengan menggunakan

eval MAC=($(awk -F "," '{print $1}' random.csv))

Ini dilakukan untuk setiap kolom di CSV dan oleh karena itu saya dapat memanggil DN[2], MAC[2] dll satu per satu yang bersifat manual dan mem-parsingnya satu per satu.

Namun bagaimana cara mengurai csv per baris? Misalnya: Jika saya memanggil DN adalah 123, MAC dan Partition yang sesuai juga harus dikembalikan.


person Kaptain K    schedule 11.03.2013    source sumber
comment
Apakah Anda hanya ingin baris pertama yang cocok, atau haruskah semua baris dikembalikan?   -  person Thor    schedule 12.03.2013


Jawaban (3)


Coba satu putaran:

while IFS=, read dn mac partition
do 
  echo "Do something with $dn   $mac and $partition"
done < file

Untuk memilih rekaman, Anda dapat menggunakan pernyataan kasus:

P2=123
while IFS=, read dn mac partition
do 
  case $dn in
    ($P2) echo echo "Do something with $dn   $mac and $partition" ;;
    (*)   echo "Do nothing" ;;
  esac
done < file
person Scrutinizer    schedule 11.03.2013
comment
dengan menggunakan ini saya akan dapat membaca variabel satu per satu. Saya dapat mengembalikannya satu per satu tetapi saya ingin membacanya per baris. Misalnya jika saya memanggil baris 2 menggunakan variabel P2 (katakanlah) Seharusnya dapat mengembalikan MAC(2), DN(2) dll - person Kaptain K; 12.03.2013

Menggunakan awk :

read -p "Gimme the DN integer >>> " i
awk -v i=$i -F' , ' '
    NR>1{
        dn[NR]=$1
        mac[NR]=$2
        partition[NR]=$3
    }
    END{
        for (a=2; a<=NR; a++)
            if (i == dn[a])
                print dn[a], mac[a], partition[a]
    }
' file.txt
person Gilles Quenot    schedule 11.03.2013

Anda juga dapat mencoba ini

file1 menyimpan semua DN yang ingin Anda ambil informasinya

#parse.awk

BEGIN { FS="," ; OFS= "\t"}

FNR==NR{ a[$1]; next }

$1 in a { print $1,$2,$3}

telepon awk -f parse.awk file1 csvfile.csv

person WYSIWYG    schedule 12.03.2013