使用新行将CSV元素保存到数组

时间:2017-08-10 16:21:07

标签: arrays bash csv newline cut

对于一个项目我必须使用xml格式通过rest(curl)从csv文件获取数据到一个websystem。 我几乎所有的东西都可以工作但是还有一件事。

我收到的这个项目的文件是.xlsx文件。我将它导出到.csv文件(分隔符分隔符)并将编码转换为UTF-8。原始文件大约有2000行和30列。

我的策略是“剪切”.csv文件的字段并将输出保存到一个带有bash(4.3.42)脚本的数组(我之前没有使用过Python;))在SLES12 SP2上(它是试验机)。

csv采用以下格式(简化): (注意:在一个单元格中有三行的描述。这是破坏我的脚本的部分。)curl命令使用这些新行创建错误条目。

Simplified CSV

大约四分之一的数据有类似的描述。

导出到csv之后,如果我用vim打开它,这就是文件的样子:

title|description|firstname
Test|Lorem ipsum dolor sit amet,
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat
sed diam voluptua.|Chris

这是我的简化脚本:

file="Kontakte.csv"

# Get the values from the file
arrV[1]=$(cut -d'|' -f1 "$file" | cut -d$'\n' -f2) # Title
arrV[2]=$(cut -d'|' -f2 "$file" | cut -d$'\n' -f2) # Description
arrV[3]=$(cut -d'|' -f3 "$file" | cut -d$'\n' -f2) # First name

echo "### Values ###"
# For reference
echo "Title: " ${arrV[1]}
echo "Description: " ${arrV[2]}
echo "Name: " ${arrV[3]}

我得到的是......

### Values ###
Title:  Test
Description:  Lorem ipsum dolor sit amet,
Name: Chris

......而不是那样的东西:

### Values ###
Title:  Test
Description:  Lorem ipsum dolor sit amet,\n onsetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat\n sed diam voluptua.
Name: Chris

我有一个vba脚本来摆脱新行,但这将是一个不太理想的解决方案。

在执行中添加一些引号以使其正常工作会很好,例如:

arrV[2]="$(cut -d'|' -f2 "$file" | cut -d$'\n' -f2)"

但我不能解决这个问题。

您对这些新线路有什么想法吗?或者是在Excel中预先删除新行我唯一的选择?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您正在使用面向行的工具,因此嵌入式'restful:new'导致问题并不奇怪。选择像〜一样的字符,然后使用grep验证它不会出现在.csv中。使用\n(Mac)行终止符导出到.csv。然后使用tr& mac2unix将换行符映射到保留字符并修复行终止符:

\r

当您完成文件整理后,tr '\n' '~' < Kontakte.csv | mac2unix > New.csv 将恢复重要性。

当然,使用适当的工具(例如CSV库)会好得多。