Parse CSV in bash and assign variables

2020-02-29 04:04发布

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.

3条回答
时光不老,我们不散
2楼-- · 2020-02-29 04:20

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
查看更多
劳资没心,怎么记你
3楼-- · 2020-02-29 04:23

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

查看更多
做个烂人
4楼-- · 2020-02-29 04:24

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
查看更多
登录 后发表回答