这是示例csv文件:
name,annotations,description
drgreghouse,princeton,"doctor,head"
sheldon,tbbt,"physicist,actor"
chandler,friends,"actor,comedian"
我正在尝试这样的东西,但它只读取第一个值
INPUT="$(pwd)/data.csv"
IFS=','
sed 1d $INPUT |while read name annotations description; do
echo "$name $annotations $description"
done
O/p-
drgreghouse princeton "doctor
sheldon tbbt "physicist
chandler friends "actor
预期O/p
drgreghouse princeton doctor,head
sheldon tbbt physicist,actor
chandler friends actor,comedian
sed
和shell没有CSV文件的概念。如果你想在CSV中处理带引号的字段,你必须自己处理带引号字段,或者切换到一个为你处理它们的工具。
如果你的数据没有复杂的引号,你可以用数据中没有出现的不同分隔符替换每个没有引号的逗号(也许试试|
(,然后从那里取它。如果您只想转换为空格分隔,请尝试此操作。
sed -e 1d -e 's/"([^"]*)",|([^[",]*),/12 /g' data.csv
演示:https://ideone.com/sg9crO
要使用不同的分隔符,请将12
后面的空格更改为该分隔符。但是,请再次理解,这种快速而肮脏的regex破解无法处理CSV的所有引用规则。
顺便说一句,您不需要$(pwd)
来引用当前目录;相对文件名总是相对于当前工作目录进行解析。