gpt4 book ai didi

linux - bash shell : How to parse file names

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:30 25 4
gpt4 key购买 nike

所以我有几个这种格式的文件:

fileYYYY-MM-DD-HH.foo
nameOfFileYYYY-MM-DD-HH.bar
FileNameYYYY-MM-DD-HH
NameYYYY-MM-DD-HH

唯一的共同点是

YYYY-MM-DD-HH
YYYY - Year
MM - Month (2 digit)
DD - Day (2 digit)
HH - Hour (2 digit)

在扩展名之前(如果文件有扩展名)。

我的问题是,我必须将该日期与一堆同名但日期不同的文件进行比较,然后删除除 4 个最新文件之外的所有文件。

<小时/>

例如:有这个

foo2013-01-01-13
foo2013-11-02-13
foo2014-01-01-13
foo2014-11-05-13
foo2015-04-23-13
foo2015-08-02-12

得到这个:

foo2014-01-01-13
foo2014-11-05-13
foo2015-04-23-13
foo2015-08-02-12
<小时/>

我真的不知道如何做到这一点。

最佳答案

如果您的 awk 具有 patsplit 函数,那么您很幸运:

sort -r |
awk '{patsplit($0,a,"[1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]",s)}
s[0]!=p0 || s[1]!=p1 {n=0; p0=s[0]; p1=s[1]}
s[0]==p0 && s[1]==p1 && n<4 {print}
{++n}'

这应该打印要保存的文件。如果您想要删除文件列表,请将 n<4 更改为 n>3。

关于linux - bash shell : How to parse file names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com