使用复杂的自定义分隔符将 TXT 转换为 CSV

使用复杂的自定义分隔符将 TXT 转换为 CSV

我正在尝试csv使用以下文本文件转换为Excel 365 数据文本导入向导。文件似乎来自正在使用1252: Western European (Windows)编码的源。

通过查看文件的内容,我决定使用^|^,^|^自定义分隔符,它似乎有效,但第一列和最后一列仍然有^|^其值(如下图所示)。

问题:在以下文件中使用自定义分隔符的更好方法是什么,以便我们不会^|^在第一列和最后一列中获取值?

评论:实际文件非常大(1GB),大约有 150 列。以下只是为了简洁起见而使用的示例。

txt 文件的快照

^|^Col0^|^,^|^Col1^|^,^|^Col2^|^,^|^Col3^|^,^|^Col4^|^,^|^Col5^|^,^|^Col6^|^,^|^Col7^|^
^|^1234^|^,^|^4600869848^|^,^|^6000.00^|^,^|^2021-12-20 10:16:19.3600000^|^,^|^False^|^,^|^^|^,^|^^|^,^|^2^|^
^|^5431^|^,^|^3425143451^|^,^|^30000.00^|^,^|^2021-12-13 10:27:44.9030000^|^,^|^False^|^,^|^^|^,^|^^|^,^|^2^|^
..............
................

Excel 文本导入向导结果在此处输入图片描述

答案1

如果您决定将字符串 ^|^,^|^ 添加到文本文件,则结果与软件的请求一致。文本行的开始和结束不是 ^|^,^|^,而是 ^|^,这将提供显示的结果。

考虑在文本文件中用字符串 ^|^ 替换包含逗号的字符串,这仍然会提供您所需的分隔符。

答案2

如果你简单地删除^|^,你就得到了正确的 CSV

<input.csv sed -r 's/\^\|\^//g' >output.csv
+------+------------+----------+-----------------------------+-------+------+------+------+
| Col0 | Col1       | Col2     | Col3                        | Col4  | Col5 | Col6 | Col7 |
+------+------------+----------+-----------------------------+-------+------+------+------+
| 1234 | 4600869848 | 6000.00  | 2021-12-20 10:16:19.3600000 | False | -    | -    | 2    |
| 5431 | 3425143451 | 30000.00 | 2021-12-13 10:27:44.9030000 | False | -    | -    | 2    |
+------+------------+----------+-----------------------------+-------+------+------+------+

如果字段内容中有一些,内容,您可以将文件转换为制表符分隔值:

<input.csv sed -r 's/^\^\|\^//g;s/\^\|\^$//g;s/\^\|\^,\^\|\^/\t/g' >output.tsv
Col0    Col1    Col2    Col3    Col4    Col5    Col6    Col7
1234    4600869848      6000.00 2021-12-20 10:16:19.3600000     False                   2
5431    3425143451      30000.00        2021-12-13 10:27:44.9030000     False                   2

我正在使用sed实用程序。它始终在 Linux 系统中,但您也可以在 Windows 上安装和使用它。

相关内容