如何将制表符分隔的.txt
文件更改为 CSV 文件而不损害格式?
我只设法将类型从 更改为.txt
,.csv
但所有用制表符分隔的数据都放置在同一个 Excel 单元格中。
所以我在这里要问的是:
- 如何将多个文件的制表符更改为逗号?
- 那么如何将文件从 更改
.txt
为.csv
?
答案1
你可以这样做:
perl -MText::CSV -F'\t' -i.orig -lape '
BEGIN{$c = Text::CSV->new({binary=>1, eol=>""})}
$_ = $c->string if $c->combine(@F)' ./*.txt
转换为恰当的CSV(请参阅perldoc Text::CSV
是否需要调整 CSV 的格式)。如果您需要的只是将制表符转换为逗号,那么只需tr '\t' , < file.txt > file.csv
.
答案2
使用csvkit
:
假设输入文件如下
a 10,000 e u
a o e u
a o "hello world" u
a o e u
hello
其中所有字段均以制表符分隔,并且在和之间还有一个制表符world
(即使这两个单词属于引用所示的同一字段)。
$ csvformat -t file.txt
a,"10,000",e,u
a,o,e,u
a,o,hello world,u
a,o,e,u
选项-t
告诉csvformat
实用程序输入是制表符分隔的。
请注意, 已10,000
被正确引用,并且周围的引号hello<tab>world
已被删除,因为它现在是明确的。
强制引用所有字段:
$ csvformat -t -U 1 file.txt
"a","10,000","e","u"
"a","o","e","u"
"a","o","hello world","u"
"a","o","e","u"
如果输入使用另一个引号字符,如
$ cat file.txt
a 10,000 e u
a o e u
a o 'quote: "hello world"' u
a o e u
然后这样做:
$ csvformat -t -q "'" file.txt
a,"10,000",e,u
a,o,e,u
a,o,"quote: ""hello world""",u
a,o,e,u
我们指定在输入数据中使用单引号-q "'"
。
.txt
要在多个文件上运行此命令,请将每个文件从制表符分隔转换为 CSV,假设我们要处理当前的目录:
for name in ./*.txt; do
csvformat -t "$name" >"${name%.txt}.csv"
done
该位从文件名中${name%.txt}.csv
删除扩展名并添加扩展名。这也可以写成.txt
.csv
for name in ./*.txt; do
csvformat -t "$name" >"./$( basename "$name" .txt ).csv"
done
然后,您将拥有一组(未更改的原始).txt
文件及其相应的.csv
文件。
答案3
你可以尝试下面的命令
sed 's/\t/,/g' yourtab.txt > updatefile.csv