使用命令行将 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"
我有 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"