首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据ksh脚本中的日期提取文件

根据ksh脚本中的日期提取文件
EN

Stack Overflow用户
提问于 2014-07-24 14:47:39
回答 2查看 58关注 0票数 0

我有这份文件清单。现在我必须根据某些条件选择最新的文件。

代码语言:javascript
复制
   3679 Jul 21 23:59 belk_rpo_error_**po9324892**_07212014.log
   0    Jul 22 23:59 belk_rpo_error_**po9324892**_07222014.log
   3679 Jul 23 23:59 belk_rpo_error_**po9324892**_07232014.log
     22 Jul 22 06:30 belk_rpo_error_**po9324267**_07012014.log
      0 Jul 20 05:50 belk_rpo_error_**po9999992**_07202014.log
    411 Jul 21 06:30 belk_rpo_error_**po9999992**_07212014.log
    742 Jul 21 07:30 belk_rpo_error_**po9999991**_07212014.log
      0 Jul 23 2014  belk_rpo_error_**po9999991**_07232014.log

Order_No(标记为*)

  1. 如果最新的文件是0 kB,那么我们将丢弃它(其余的文件也有相同的Order_no )。
  2. 如果最新的文件是非零的,那么我将接受它。(只有最新的一个)

然后将内容附加到txt文件中。我的预期产出如下:

代码语言:javascript
复制
   411 Jul 21 06:30 belk_rpo_error_**po9999992**_07212014.log
   3679 Jul 23 23:59 belk_rpo_error_**po9324892**_07232014.log
    22 Jul 22 06:30 belk_rpo_error_**po9324267**_07012014.log

我在这里束手无策。我似乎不知道如何在Unix中比较日期。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2014-07-25 17:50:28

你可以尝试这样的方法:

代码语言:javascript
复制
touch test.txt
for var in ` find . ! -empty -exec ls -r {} \;`
do
    cat $var>>test.txt
done
票数 1
EN

Stack Overflow用户

发布于 2014-07-25 18:57:38

未测

使用stat发出日期(划时代时间)、大小和文件名。

使用awk过滤出零长度文件并提取订单号.

按订单编号和日期进行排序

获取每个订单编号的最后一个文件名的awk

代码语言:javascript
复制
stat -c $'%Y\t%s\t%n' *.log | 
awk -F'\t' -v OFS='\t' '
    $2 > 0 {
        split($3, a, /_/)
        print a[4], $1, $3
    }' |
sort -t $'\t' -k1,1 -k2,2n |
awk -F'\t' '
    NR > 1 && $1 != prev_order {print filename}
    {filename = $3; prev_order = $1}
    END {print filename}
' 

排序命令可能是错误的:为了按顺序编号分组,您可能需要先按文件时间排序,然后再按顺序编号排序。

如果我理解您的问题,则需要将产生的文件连接起来并附加到文件中。如果上面的管道工作正常,那么管道进入| xargs cat >> something.log

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24936977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档