假脱机的SQL输出到CSV



我从下面的假脱机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

我需要得到这样的输出。

输出
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文件。

假设这是您的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

您可以使用头/尾从顶部删除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

最新更新