将制表符分隔文件转换为 CSV
Contents
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+ 正则表达式替换多个选项卡。