在重定向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 

OR

command: awk 'NF' $my_temp_file 

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

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

wangkewei5724146 回答:在重定向db2 select查询输出到shell脚本中的文件时获取文件中的空间

文件可能没有您期望的换行符。 CLP将添加尾随空格,其长度比您想象的要宽得多。

另外,检查file_path或filename列中的数据是否包含换行符,并通过查询中的translate / replace将其删除。

您可以对输出文件进行后处理以删除空格,也可以在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

本文链接:https://www.f2er.com/3115567.html

大家都在问