我正在尝试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^|^
..............
................
答案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 上安装和使用它。