答案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