使用命令行将 CSV(制表符分隔)转换为 Excel

Convert CSV (tab delimited) to Excel using command line

我有 100 多个格式如下的文件:

Jan 20 21:42:36 123UH9887934 [process name] text text text text

制表符分隔。

所有这些都在一个目录中;每个文件有很多条目;格式相同。

我想使用 bash 或 Powershell 甚至 Mac Automator 脚本,将它们转换为 Excel 格式。

导入到 Excel 只是将所有数据放入一个单元格中。并且是手动的。

问题是大多数脚本都假定逗号作为分隔符,因此它们将所有数据放在一个单元格中。

如果我在 Numbers 中一个一个地打开文件,它会理解制表符分隔符并正确格式化。它只是需要永远。

我试过 Powershell: Import-Csv "VQ18072500JPJ.csv" | Format-Table 但不太明白它要我如何转换并保存到新文件。

我试过 Bash: for file in ./*.csv do ssconvert -O "separator=' ' $file ${file%.csv}.xls; done 但它也不理解分隔符。

任何关于如何使用脚本转换 100 个制表符分隔的 CSV 的想法都将不胜感激。

谢谢

假设唯一的 objective 是将制表符转换为逗号:

$ tr '\t' ',' < file.csv
Jan,20,21:42:36,123UH9887934,[process name],text,text,text,text

$ awk -v OFS=, '{=}1' file.csv
Jan,20,21:42:36,123UH9887934,[process,name],text,text,text,text

$ sed 's/\t/,/g' file.csv
Jan,20,21:42:36,123UH9887934,[process name],text,text,text,text

当您的 csv 文件以行 SEP=x 开头时,字符 x 将被 Excel 用作字段分隔符。将 x 替换为真正的 TAB。

for f in *.csv; do
  sed -i '1s/^/SEP=\t\n/' "$f"
done

也许您可以将 PowerShell 与 中给出的代码一起使用 也许把一行改成

$query.TextFileOtherDelimiter = "`t"