我有这个文件列表。现在我将不得不根据某些条件选择最新的文件
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
对于PATRICULAR Order_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中比较日期。非常感谢任何帮助。
答案 0 :(得分:1)
您可以尝试以下内容:
touch test.txt
for var in ` find . ! -empty -exec ls -r {} \;`
do
cat $var>>test.txt
done
答案 1 :(得分:1)
未测试
使用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}
'
sort命令可能是错误的:为了按订单号分组,您可能需要先按文件时间
如果我理解您的问题,则需要将生成的文件连接起来并附加到文件中。如果上面的管道工作正常,那么管道进入| xargs cat >> something.log