带有新行的SQLite导入字段

时间:2013-09-10 21:58:09

标签: bash sqlite sed tr

我有一些由\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作为换行符?

1 个答案:

答案 0 :(得分: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"