bash - SQLite用新行导入字段

标签 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作为换行符导入?

最佳答案

您可以尝试以下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"

关于bash - SQLite用新行导入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729422/

相关文章:

bash - 在 shell 脚本的 while 循环中运行 expect 命令

sqlite 无法识别的 token

bash - sed 提取两个模式之间的内容

linux - 使用 sed 获取日期

linux - 将 wget 与 OpenID 登录结合使用

linux - cd 命令在管道中的行为

sqlite元组比较

sqlite - 无法抓取数据库 :migrate due to sqlite3_busy timeout

regex - 替补中的坏旗

linux - 导出在 shell 中不起作用