我有一套csv文件(大约250),每个文件有300到500个logging。 我需要从每个文件中裁减2或3列,并将其存储到另一个文件中。 我正在使用Ubuntu操作系统 。 有什么方法可以在命令或实用程序中执行?
如果您知道列分隔符不在域内出现,则可以使用剪切。
$ cat in.csv foo,bar,baz qux,quux,quuux $ cut -d, -f2,3 < in.csv bar,baz quux,quuux
你可以使用shell buildin'for'循环所有的输入文件。
如果这些字段可能包含分隔符,则应该找到一个可以解析CSV文件的库。 通常,通用脚本语言将在其标准库中包含一个CSV模块。
Ruby: require 'csv' Python: import csv Perl: use Text::ParseWords;
如果您的字段包含逗号或换行符,则可以使用我编写的帮助程序来允许剪切(以及其他UNIX文本处理工具)正确处理数据。
https://github.com/dbro/csvquote
这个程序在引用的字段中找到特殊字符,并用非打印字符暂时替换它们,这不会混淆被切割的程序。 然后在切割完成后恢复。
卢茨的解决方案将成为:
csvquote in.csv | cut -d, -f2,3 | csvquote -u
如果您使用ssconvert
获取CSV,您可以尝试:
ssconvert -O 'separator="|"' "file.xls" "file.txt"
请注意TXT扩展名为CSV ,这种方式将使用Gnumeric_stf:stf_assistant导出程序而不是Gnumeric_stf:stf_csv ,它使您可以使用选项( -O
参数)。 否则,你会得到一个文件保护程序不会采取选项错误。 管道字符是不太可能的,但你可能要检查之前。
然后,您可以重新命名它,并执行如下操作:
cat file.csv | cut -d "|" -f3 | sort | uniq -c | sort -rn | head
-O 'eol=unix separator=; format=preserve charset=UTF-8 locale=en_US transliterate-mode=transliterate quoting-mode=never'
-O 'eol=unix separator=; format=preserve charset=UTF-8 locale=en_US transliterate-mode=transliterate quoting-mode=never'
。 ssconvert
手册页 。