【问题标题】:Getting spaces in file while redirecting db2 select query output to a file in a shell script在将 db2 select 查询输出重定向到 shell 脚本中的文件时获取文件中的空格
【发布时间】:2019-11-12 17:11:11
【问题描述】:

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 命令之后,这不起作用...

为什么会出现这些空格以及为什么没有删除这些空格?

【问题讨论】:

    标签: linux shell unix db2 sh


    【解决方案1】:

    也许该文件没有您期望的换行符。 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

    【讨论】:

    • 嗨..谢谢你的回答,但正如你所说的'后处理'即使我使用命令:sed -i'/^$/d'$my_temp_file OR 命令:awk'NF'$ my_temp_file 在脚本中的 db2 命令之后,这不起作用
    • 我在答案中输入的命令对我有用,我不使用 -i 也不搜索换行符
    • 好的。实际上,我将通过使用循环一个一个地读取这个文件来删除这些记录,因此寻找一个非空间文件......顺便说一句,谢谢你的回答。会尝试相同的
    • 你能告诉我为什么我们在 sed 's/ //g' 中的 g 前面有 2 个斜杠吗?
    • 该表达式要求全局替换两个连续的空格 (//),即删除它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多