[英]Parse CSV in bash and assign variables
我有一个格式的csv(在Linux上使用Bash)
DN , MAC , Partition ,
123 , abc , xyz
321 , asd , asd
我可以使用awk解析它
eval MAC=($(awk -F "," '{print $1}' random.csv))
这是针对CSV中的每一列完成的,因此我可以单独调用DN[2]
, MAC[2]
等,这是手动并单独解析它们。
但是如何逐行解析csv呢? 例如:如果我呼叫DN
为123
,则还应返回相应的MAC
和Partition
。
尝试循环:
while IFS=, read dn mac partition
do
echo "Do something with $dn $mac and $partition"
done < file
要选择记录,您可以使用case语句:
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
使用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
你也可以试试这个
file1存储要为其检索信息的所有DN
#parse.awk
BEGIN { FS="," ; OFS= "\t"}
FNR==NR{ a[$1]; next }
$1 in a { print $1,$2,$3}
调用awk -f parse.awk file1 csvfile.csv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.