首页 > 解决方案 > 在将 db2 select 查询输出重定向到 shell 脚本中的文件时获取文件中的空格

问题描述

Shell 脚本包含以下代码:

db2 -x "select trim(file_path || '/' || filename) from mytable" > $my_temp_file

在文件中输出:

/path1/file1.txt


/path2/file2.txt


/path3/file3.txt


/path4/file4.txt

即使我正在使用

command: sed -i '/^$/d' $my_temp_file 

或者

command: awk 'NF' $my_temp_file 

在脚本中的 db2 命令之后,这不起作用...

为什么这些空间来了,为什么这些空间没有被删除?

标签: linuxshellunixdb2sh

解决方案


也许该文件没有您期望的换行符。CLP 会将尾随空格添加到比您想象的要宽得多的长度。

另外,检查 file_path 或 filename 列中的数据是否包含换行符,并通过查询中的翻译/替换将它们删除。

您可以对输出文件进行后处理以删除空格,也可以在 SQL 中限制输出字符串的宽度,或者结合这两种方法。

要在后处理中删除空格:

db2 -x "select trim(file_path || '/' || filename) from mytable" | sed 's/ //g' > $my_temp_file

限制 SQL 中输出字符串的宽度(例如限制为 80 个字节,有截断的风险)。这意味着短于 80 的文件名将用最多 80 个空格(或您指定的长度)填充。

db2 -x "select cast(rtrim(file_path || '/' || rtrim(filename) as varchar(80)) from mytable" > $my_temp_file


推荐阅读