2

我有一些由\002字符分隔的数据。这是我用来导入它的:

cat data.txt             \
  | tr -d '\r'           \
  | tr    '\n'   '\003'  \
  | tr    '\t'   ' '     \
  | tr    '\001' '\t'    \
  | tr    '\002' '\n'    \
  | sed 's%\003%\\n%g'   \
  > data-formatted.txt

此命令擦除\r字符、更改\n\\n和更改\002为新行\n

之前的格式化:

http://wikisend.com/download/486524/data.txt

Not Escaped:
1 new
line 2 new
line
2   

Escaped:
1\001new\nline\002\001
2\001new\nline\n2\002\001
 

格式化后:

Not Escaped:
1   new\\nline  
2   new\\nline\\n2  

Escaped:
1\tnew\\nline\t\n
2\tnew\\nline\\n2\t\n

问题是我的数据正在导入\n而不是新行。

这是我的导入脚本:

import.txt:

    .separator  "\t"
    .import     data-formatted.txt my_table

还有我的导入命令: cat import.txt | sqlite3 my.db

要测试数据:

echo 'SELECT * FROM my_table;' | sqlite3 my.db

    1|new\nline|
    2|new\nline\n2|
 

如何在数据字段中导入 \n 作为换行符?

4

1 回答 1

1

你可以试试这个 Ruby 代码。这会将您的数据转换为 csv 格式。

#!/usr/bin/env ruby

require 'csv'

data = File.read(ARGV.shift)

set = data.split("\x02\x0a").map{|e| e.strip.split("\x01")}.select{|e| e.any?}

output = CSV.generate do |csv|
    set.each do |e|
        csv << e
    end
end

puts output

将其保存到文件中script.rb并运行ruby script.rb data > output.csv

我希望你的数据不是那么大。如果它滞后,请尝试使用更快的生成器,例如FasterCSV

示例输出:

1,"new
line"
2,"new
line
2"
于 2013-09-11T20:33:39.430 回答