Contents

将制表符分隔文件转换为 CSV

1. 概述

作为 Linux 用户,我们经常对我们的文件执行各种操作。更常见的操作之一是分隔符转换。例如,我们可能希望将制表符分隔的文件转换为逗号分隔值 (CSV),以便在需要该格式的应用程序中使用它。

在本教程中,我们将研究使用*bash *完成此任务的各种方法。

2. 建立一个例子

让我们创建一个包含选项卡的示例文件input.txt

str1   str2
str3       str4
str5               str6
str7           str8

然后让我们检查这个文件是否有正确的内容:

$ cat --show-tabs input.txt
str1^Istr2
str3^I^Istr4
str5^I^I^I^Istr6
str7^I^I^Istr8

在上面的示例中,我们使用了*cat 命令的–show-tabs选项。此选项将TAB字符显示为^I*。

3. 使用tr命令

当我们想要翻译或删除字符时,我们可以使用tr 操作文件。让我们使用它来将TAB字符转换为逗号:

$ cat input.txt | tr -s "\\t" "," > output.txt

在这个例子中,  -s表示重复操作,我们用它来用一个逗号替换多个TAB字符。**

让我们检查一下结果:

$ cat output.txt
str1,str2
str3,str4
str5,str6
str7,str8

我们应该注意到,尽管该文件有多个制表符分隔符,但 tr在每种情况下都将它们转换为单个逗号。

4. 使用awk命令

awk 命令是 AWK 编程语言的解释器。它允许我们使用简洁的代码执行复杂的文本处理。我们可以使用它的字符串操作函数 来达到预期的效果:

$ awk '{ gsub(/[\t]/,","); print }' input.txt > output.txt
$ cat output.txt 
str1,str2
str3,,str4
str5,,,,str6
str7,,,str8

在上面的示例中,我们使用了带有gsub函数的正则表达式。这将每个选项卡转换为单独的逗号。如果愿意,我们可以使用表达式gsub(/[\t]+/,”,”); 替换多个TAB字符。

5. 使用sed命令

sed 是一个用于过滤和转换文本的流编辑器。它允许我们以非交互方式执行文本处理。我们可以使用它的替换命令TAB转换为逗号:

$ sed 's/\t\+/,/g' input.txt > output.txt
$ cat output.txt 
str1,str2
str3,str4
str5,str6
str7,str8

在此示例中,我们将正则表达式与sed命令一起使用。在这里,我们选择使用 \t+ 正则表达式替换多个选项卡。