>我需要在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"
有什么方法可以从该文件中读取多行,并且行数一直都不相同。
这可能是你所追求的:
awk -F, '{ sub(/^"/, "", $1); sub(/"$/, "", $1);
sub(/^"/, "", $2); sub(/"$/, "", $2);
printf "%-20s %sn", $1, $2;
}'
如果您花更多时间手动抨击,很可能压缩替代操作。 作为解决方案,这是脆弱的(大多数不使用专门用于处理CSV格式的代码的解决方案都是脆弱的);如果逗号出现在任何引号括起来的字段中,它会严重失败。
应用于您的数据,它可以产生:
Filename Lines
/etc/hosts example.test.com
example2.test.com
/etc/resolv.conf nameserver dns.test.com
search test.com
可靠地操作CSV格式数据的其他可能工具包括:
- Perl plus Text::CSV 模块
-
csvfix
.
如果这不是您要找的,请澄清问题。
假设您的输入与您的示例一样基本,您可能只需执行以下操作即可:
sed 's/^,/ ,/' test2.csv | tr -d " | column -s, -t