用里面的blanc读取csv文件标题

时间:2016-12-19 10:26:32

标签: linux shell csv

我正在尝试阅读csv文件:

"EDP";"Picture 1";"Picture 2";"Picture 2"
"1001480210";"T244.png";"";""

我创建了一个脚本来读取这些文件:

cd ~/86829/
while IFS=';' read "EDP" "Picture 1" "Picture 2" "Picture 3"

当我运行脚本时,我收到了这个错误:

./RUN_CopyPictures.sh: 9: read: Picture 1: bad variable name

当我将标题更改为"Picture1";"Picture2";"Picture2",将脚本更改为while IFS=';' read EDP Picture1 Picture2 Picture3

它的工作

所以我的问题非常明确:

如何在内部使用blancs读取csv文件的标题?

1 个答案:

答案 0 :(得分:1)

问题不在于阅读"标题" (通常只是CSV文件的第一行)。

相反,您的问题(导致错误)是行read x为名为x的变量赋值(然后可以通过$x引用)。

在您的示例中,您使用read "Picture 1"有效地尝试为名为Picture 1的变量赋值。 由于bash禁止带有空格的变量名称(就像任何其他非深奥的编程语言一样),这会给你一个错误。

解决方案是使用清晰且合法的变量名称:

while IFS=';' read edp pic1 fusel y
do
   echo "Picture 1 is ${pic1}"
   echo "Picture 2 is ${fusel}"
   echo "Picture 3 is ${y}"
done

有许多变量名称的命名方案,常见的包括全部小写(或没有)下划线来分隔单词,或 CamelCase < / em>的

on&#34; titles&#34;

您的脚本并不知道任何关于您所称的&#34;标题&#34;。 CSV并不了解&#34; title&#34;无论是。 CSV只是一种包含行(行)和列的格式,而不是只有行的简单文本文件。 正如文本文件没有&#34;标题&#34;的概念一样,CSV文件没有&#34;标题&#34;。 但是,流行的CSV导出软件可能会为CSV文件中的第一行指定一个特殊含义,并且(ab)将其用于标题信息(因此内容只是一个标签,而实际的列内容可以是不同的东西)

在任何情况下,您的脚本的IFS=';' read ...部分都不会使用标题任何;如果输入数据并将这些字段分配给变量,它只需从一行中提取多个字段。 这些变量的名称可以完全是任意的(只要它们符合变量名的bash语法),并且不需要与文件的内容有任何关系。