简体   繁体   中英

Parse CSV in bash and assign variables

I have a csv of the format (Working on Bash on linux)

DN , MAC , Partition ,  

123 , abc , xyz  
321 , asd , asd 

I am able to parse it using awk by using

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

This is done for each column in the CSV and therefore I can call DN[2] , MAC[2] etc individually which is manual and parses them individually.

But how can I parse the csv by row? For example : If I call for DN is 123 , the corresponding MAC and Partition should also be returned.

Try a loop:

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

To select a record you could use a case statement:

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

Using 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

you can also try this

file1 stores all the DN for which you want to retrieve the information

#parse.awk

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

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

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

call awk -f parse.awk file1 csvfile.csv

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM