2

我需要在 shell 中读取 CSV 文件,我可以接受单元格中包含单行的 CSV 文件。但是如果我们在 CSV 文件的单元格中有多行,那么我无法分隔 CSV 文件。

Filename            Lines
/etc/hosts          example.test.com
                    example2.test.com
/etc/resolv.conf    nameserver dns.test.com
                    search test.com

我将在 CSV 文件中从用户那里获取输入,并且必须将给定的行添加到提到的文件中。在这里,CSV 文件的每个单元格中都有多行,如果我尝试对文件进行分类,它会以不同的顺序给出。

[user2@mon ~]$ cat test2.csv
"Filename","Lines"
"/etc/hosts","example.test.com"
,"example2.test.com"
"/etc/resolv.conf","nameserver dns.test.com"
,"search test.com"

有什么方法可以从该文件中读取多行,并且行数始终不一样。

4

2 回答 2

2

假设您的输入与您的示例一样基本,您可能只需执行以下操作即可逃脱:

sed 's/^,/ ,/' test2.csv | tr -d \" | column -s, -t
于 2012-10-08T14:57:45.690 回答
2

这可能是你所追求的:

awk -F, '{ sub(/^"/, "", $1); sub(/"$/, "", $1);
           sub(/^"/, "", $2); sub(/"$/, "", $2);
           printf "%-20s  %s\n", $1, $2;
         }'

如果您花更多时间手动抨击,则很有可能压缩替代操作。这是一个脆弱的解决方案(大多数不使用专门用于处理 CSV 格式的代码的解决方案都是脆弱的);如果逗号出现在任何引号括起来的字段中,它会严重失败。

应用于您的数据,它会产生:

Filename              Lines
/etc/hosts            example.test.com
                      example2.test.com
/etc/resolv.conf      nameserver dns.test.com
                      search test.com

可靠地操作 CSV 格式数据的其他可能工具包括:

如果这不是您要查找的内容,请澄清问题。

于 2012-10-08T14:18:12.980 回答