我需要在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"
我们有什么方法可以读取该文件中的多行,并且行数始终不相同。
答案 0 :(得分: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格式数据的其他工具包括:
如果这不是您要找的,请澄清问题。
答案 1 :(得分:2)
假设您的输入与示例一样基本,您可以轻松完成:
sed 's/^,/ ,/' test2.csv | tr -d \" | column -s, -t