【问题标题】:Spooled SQL output to CSV假脱机 SQL 输出到 CSV
【发布时间】:2021-10-11 15:46:35
【问题描述】:

我从 spooled sql 命令中输入了 4GB 的数据,如下所示:

SQL> select * from hist_tran_monthly;
   250,            10,         0,R,    199801,      4155,      199801
  2222,31-JAN-98
   250,            10,         0,R,    199802,      4155,      199802
 11111,28-FEB-98
   250,            10,         0,C,    199803,      4155,      199803
 11111,31-MAR-98
   250,            10,         0,R,    199807,      4155,      199807
 28934,29-JUN-98
   250,            10,         0,R,    199808,      4155,      199808

尾巴

    701679,           485,         1,C,    201001,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201002,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201003,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201004,    229.69,      201311
  14112013,14-NOV-13
42912030 rows selected.
SQL> spool off

我需要得到这样的 output.csv

输出

       250,            10,         0,R,    199801,      4155,      199801,      2222,31-JAN-98
       250,            10,         0,R,    199802,      4155,      199802,     11111,28-FEB-98
       250,            10,         0,C,    199803,      4155,      199803,     11111,31-MAR-98
       250,            10,         0,R,    199807,      4155,      199807,     28934,29-JUN-98
...
    701679,           485,         1,C,    201001,    222.76,      201311,  14112013,14-NOV-13
    701679,           485,         1,C,    201002,    222.76,      201311,  14112013,14-NOV-13
    701679,           485,         1,C,    201003,    222.76,      201311,  14112013,14-NOV-13
    701679,           485,         1,C,    201004,    229.69,      201311,  14112013,14-NOV-13

如何删除第一行和最后两行并删除备用换行符并插入逗号以使其成为csv 文件。

【问题讨论】:

  • 您的示例输入的最长行至少有 73 个可见字符;由此我将假设您的 SQL 客户端将 SQL 结果包装在大约 80 个字符处;在编写脚本以消除过早的换行之前,您可能想查看您的 SQL 客户端是否具有(命令行)选项来扩展输出的宽度(例如,isql 具有允许“宽”的-w <number_of_columns>输出(例如,-w 1000
  • 输出来自Oracle 8i DB,我不认为isql命令可以和它一起使用
  • 我不是说要使用isql,我是说无论您使用什么工具(sqlplus?sqldeveloper?)都可能有类似于isql'的选项s -w 选项;对于 Oracle,set line 是否可以增加宽度?
  • 是的,这有帮助!

标签: bash oracle shell csv command-line


【解决方案1】:

假设这是你的data.txt

SQL> select * from hist_tran_monthly;
   250,            10,         0,R,    199801,      4155,      199801
  2222,31-JAN-98
   250,            10,         0,R,    199802,      4155,      199802
 11111,28-FEB-98
   250,            10,         0,C,    199803,      4155,      199803
 11111,31-MAR-98
   250,            10,         0,R,    199807,      4155,      199807
 28934,29-JUN-98
   250,            10,         0,R,    199808,      4155,      199808
    701679,           485,         1,C,    201001,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201002,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201003,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201004,    229.69,      201311
  14112013,14-NOV-13
42912030 rows selected.
SQL> spool off

您可以使用 head/tail 从顶部删除 1 行,从底部删除 2 行:

# tail -n +2 : removes top line
# head -n -2 : remove 2 lines from the end
$ tail -n +2 data.txt | head -n -2

还有其他方法可能效果更好,这是我会使用的方法。

编辑:这是输出:

   250,            10,         0,R,    199801,      4155,      199801
  2222,31-JAN-98
   250,            10,         0,R,    199802,      4155,      199802
 11111,28-FEB-98
   250,            10,         0,C,    199803,      4155,      199803
 11111,31-MAR-98
   250,            10,         0,R,    199807,      4155,      199807
 28934,29-JUN-98
   250,            10,         0,R,    199808,      4155,      199808
    701679,           485,         1,C,    201001,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201002,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201003,    222.76,      201311
  14112013,14-NOV-13
    701679,           485,         1,C,    201004,    229.69,      201311
  14112013,14-NOV-13

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2018-09-26
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多