在 bash 中解析 CSV 并分配变量
Posted
技术标签:
【中文标题】在 bash 中解析 CSV 并分配变量【英文标题】:Parse CSV in bash and assign variables 【发布时间】:2013-02-27 07:34:29 【问题描述】:我有一个格式的 csv (Working on Bash on linux)
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
也应该返回。
【问题讨论】:
您只想要匹配的第一行,还是应该返回所有行? 【参考方案1】:尝试循环:
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
【讨论】:
使用这个我可以单独读取变量。我可以单独退回它们,但我希望它们按行阅读。例如,如果我使用变量 P2 调用第 2 行(比如说)它应该能够返回 MAC(2)、DN(2) 等【参考方案2】:使用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】:你也可以试试这个
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
【讨论】:
以上是关于在 bash 中解析 CSV 并分配变量的主要内容,如果未能解决你的问题,请参考以下文章