![需要解析 csv 文件,它应该存储在变量中](https://linux22.com/image/98412/%E9%9C%80%E8%A6%81%E8%A7%A3%E6%9E%90%20csv%20%E6%96%87%E4%BB%B6%EF%BC%8C%E5%AE%83%E5%BA%94%E8%AF%A5%E5%AD%98%E5%82%A8%E5%9C%A8%E5%8F%98%E9%87%8F%E4%B8%AD.png)
答案1
bash
没有对解析 CSV 的内置支持。您可以使用ksh93
支持解析 CSV(至少是某种形式的 CSV,即在双引号内"
输入文字的形式)的方法:""
read -S
#! /bin/ksh93 -
while IFS=, read -rSu3 P D ignore; do
./xyz --project "$P" --displayname "${D#*.}"
done 3< file.csv
或者将perl
/python
与适当的 CSV 解析库一起使用,您可以调整该库以适应 csv 的确切格式。示例perl
:
perl -C -MText::CSV -e '
$c = Text::CSV->new;
while (($p, $d) = @{$c->getline(STDIN)}) {
$d =~ s/.*?\.//;
system "./xyz", "--project", $p, "--displayname", $d;
}' < file.csv
如果您可以保证 CSV 字段的内容不包含双引号、逗号或换行符,使用 POSIX shell,例如bash
,您可以这样做:
tr -d \" < file.csv | while IFS=, read -r p d ignore; do
./xyz --project "$p" --displayname "${d#*.}"
done
答案2
这假设CSV 中非常可靠地出现了 ' ,
' 和 ' ' 字符:.
#!/bin/bash
cat "$1" | while IFS='' read -r line; do
D="$(echo "$line" | cut -d ',' -f 1 | tr -d '"')"
P="$(echo "$line" | cut -d '.' -f 2)"
echo 'D: '"$D"
echo 'P: '"$P"
./xyz --project "$P" --displayname "$D"
done