linux - 在将 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 命令之后,这不起作用...
为什么这些空间来了,为什么这些空间没有被删除?
解决方案
也许该文件没有您期望的换行符。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
推荐阅读
- java - 如何在杰克逊的 XmlMapper 中强制关闭标签为空或空值?
- automation - 自动化出勤的最聪明方法
- python - 当 urllib2.urlopen 抛出异常时捕获响应正文
- javascript - ngb-pagination for angular - 如何只使用下一个和上一个按钮?
- asp.net-core - 如何在 ASP.NET Core 中读取 SOAP 信封头/正文?
- java - KIE Workbench 决策表没有给出任何结果
- c# - Spawn Enemy GameObject 仅适用于相机视图,而相机随玩家游戏对象移动
- python - 如何获得 Cython 中的最大整数值?
- aframe - 带有 aframe.js 和 howler.js 的实体上的空间声音
- android - 我的 RecyclerView 适配器没有通过 Volley Request 响应更新?