预列和附加到壳变量

  • 本文关键字:变量 bash shell unix
  • 更新时间 :
  • 英文 :


我的目标是将外部表日志文件加载到Oracle数据库中的clob列中。我一直在遇到最大大小的问题,您可以一次插入,但是如果我to_clob to_clob,我可以插入整个文件是最快,最简单的方法?):

 insert into clob_insert_test values (to_clob('hfsdjhfjsdhfjksd')||chr(10)||to_clob('jhfklsdjfklsdjklfjdsjlk'));

我的问题是:我正在将文件读取到下面的shell变量中,因此我需要做的是per-pend to_clob('到该变量的每一行的开头,然后附加')|| chr(10)|| 并从变量到完成的最后一个 || chr(10)|| 。然后,我可以在clob列的SQL插入语句中使用该变量。有没有办法直接在变量上进行此操作,而不是在读取日志之前对其进行修改?

log_content=$(<"$log_file")

编辑:

对不起,我认为我不清楚。给定示例日志文件,我期望以下变量内容。

输入文件:

LOG file opened at 05/05/15 15:12:24
Field Definitions for table ext_loading
Record format DELIMITED BY NEWLINE

变量内容:

to_clob('LOG file opened at 05/05/15 15:12:24')||char(10)||to_clob('Field Definitions for table ext_loading')||char(10)||to_clob('Record format DELIMITED BY NEWLINE')

我假设您有一个文件:

this is me||chr(10)||adfasdf
asdas||chr(10)||asdfasdfasdas

,您希望它变成类似的东西:

to_clob('this is meadfasdf')||chr(10)||
to_clob('asdasasdfasdfasdas')||chr(10)||

如果是这样,您可以这样使用sed

sed -e "s/||chr(10)||//" -e "s/^/to_clob('/" -e "s/$/')||chr(10)||/" file

是:

  • 从每行删除||chr(10)||一次。
  • to_clob('添加到每行的开始。
  • ')||chr(10)||添加到每行的末端。

并将其存储在变量中:

log_content=$(sed -e "s/||chr(10)||//" -e "s/^/to_clob('/" -e "s/$/')||chr(10)||/" "$log_file")

更新

要匹配您的真正需求,您也可以做到这一点:

line=$(sed -e "/./s/^/to_clob('/" -e "/./s/$/')||chr(10)||/" "$log_file")

然后输出为:

$ echo $line  # note, without quotes to have all of it together!
to_clob('LOG file opened at 05/05/15 15:12:24')||chr(10)|| to_clob('Field Definitions for table ext_loading')||chr(10)|| to_clob('Record format DELIMITED BY NEWLINE')||chr(10)||

并使用以下方式删除最后的||chr(10)||

$ echo $line | sed 's/||chr(10)||$//'
to_clob('LOG file opened at 05/05/15 15:12:24')||chr(10)|| to_clob('Field Definitions for table ext_loading')||chr(10)|| to_clob('Record format DELIMITED BY NEWLINE')

相关内容

  • 没有找到相关文章

最新更新