将多个文件从制表符分隔的 CSV 转换为逗号分隔的 CSV

将多个文件从制表符分隔的 CSV 转换为逗号分隔的 CSV

如何将制表符分隔的.txt文件更改为 CSV 文件而不损害格式?

我只设法将类型从 更改为.txt.csv但所有用制表符分隔的数据都放置在同一个 Excel 单元格中。

所以我在这里要问的是:

  1. 如何将多个文件的制表符更改为逗号?
  2. 那么如何将文件从 更改.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

相关内容