我有这份文件清单。现在我必须根据某些条件选择最新的文件。
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.logOrder_No(标记为*)
然后将内容附加到txt文件中。我的预期产出如下:
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中比较日期。任何帮助都是非常感谢的。
发布于 2014-07-25 17:50:28
你可以尝试这样的方法:
touch test.txt
for var in ` find . ! -empty -exec ls -r {} \;`
do
cat $var>>test.txt
done发布于 2014-07-25 18:57:38
未测
使用stat发出日期(划时代时间)、大小和文件名。
使用awk过滤出零长度文件并提取订单号.
按订单编号和日期进行排序
获取每个订单编号的最后一个文件名的awk
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
https://stackoverflow.com/questions/24936977
复制相似问题