【问题标题】:find command returning multiple rows in AIX在 AIX 中查找返回多行的命令
【发布时间】:2016-06-28 14:54:07
【问题描述】:

我有一个基本上每天运行的 shell 脚本,用于创建前一天的文件列表并计算文件中的请求数。

为了创建文件列表,我使用find 命令如下

find ${Search_Path} -type f  -newer ./start-time \! -newer ./end-time |egrep '\.5500\.|\.5000\.' >IncomBQR.txt

过去我遇到一个问题,它似乎输出多行

所以我尝试通过创建如下的 uniq 列表来修复它。

sort -u IncomBQR.txt>IncomBQR1.txt
cat IncomBQR1.txt>IncomBQR.txt
rm -f IncomBQR1.txt

但几个月后也失败了。你能帮我调试一下吗?

当它运行我得到的命令是

${Search_Path}/file1   
${Search_Path}/file1

我应该只为“file1”获得一行

但奇怪的是,当我手动运行时,它只找到 1 行。

【问题讨论】:

  • 我认为我们需要一些文本示例。但是由于独特的排序不会清除重复项,因此您可能会有肉眼看不见的空白空间,但很容易被 wc(字数统计)或类似内容检测到。
  • @komenten:感谢您提供响应文件名如下:/gtpfssharepath/ORGXXXX/processed/billRequest/myrquest-20160312.DAT 在我的输出列表中看起来像这样/gtpfssharepath/ORGXXXX/processed/billRequest/myrquest-20160312.DAT |35 /gtpfssharepath/ORGXXXX/processed/billRequest/myrquest-20160312.DAT |35 我想知道问题可能是由于 GPFS 文件系统引起的?跨度>
  • 也许 find 也在 IncomBQR.txt 中查找并添加该文件的 grep-results。尝试将查找输出重定向到另一个目录树中的某个位置,例如 /tmp/IncomBQR.txt
  • 如果手动运行find 只返回一次文件(应该如此),那么您的脚本就有问题。虽然对文件进行后处理可能会解决问题,但并不能解决问题。
  • Search_Path 是否包含多个目录条目?重复目录名称将导致重复输出。尝试调试 echo "Searcn_Path=$Search_Path;";

标签: bash shell aix


【解决方案1】:

您可以简化find 命令并避免使用管道到grep

find "$Search_Path" -type f -newer ./start-time ! -newer ./end-time -name '*.5[50]00.*'

如果您看到多次返回同一个文件,这很可能是您的脚本有问题,而不是 find 的结果。

【讨论】:

    【解决方案2】:

    您忘记在修复尝试中实际使用“uniq”,排序是不够的。您可以在一次调用中完成:

    find ... | sort | uniq > IncomBQR.txt
    

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 2016-11-15
      • 1970-01-01
      • 2014-08-29
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多