2014-01-25 46 views
1

我需要列出指定目录中的文件,并根据每个文件名中嵌入的日期和时间对所有可用文件进行排序,而不是文件创建或修改日期/时间。我的文件的格式如下: 之前排序使用Linux bash脚本语言获取目录上的排序文件列表

RATMS-RNSCA_npp_d20131208_t0408392_e0417432_b00001_c20131223024038606000_all-_dev.h5 
RATMS-RNSCA_npp_d20131208_t0547506_e0557586_b00001_c20131223021256522000_all-_dev.h5 
RCRIS-RNSCA_npp_d20131208_t0408392_e0417432_b00001_c20131223024038506000_all-_dev.h5 
RCRIS-RNSCA_npp_d20131208_t0548226_e0557586_b00001_c20131223021256270000_all-_dev.h5 
RNSCA-ROLPS_npp_d20131208_t0408334_e0417550_b00001_c20131223024038619000_all-_dev.h5 
RNSCA-ROLPS_npp_d20131208_t0548233_e0558223_b00001_c20131223021256591000_all-_dev.h5 
RNSCA-RONPS_npp_d20131208_t0408543_e0417005_b00001_c20131223024038636000_all-_dev.h5 
RNSCA-RONPS_npp_d20131208_t0548391_e0558002_b00001_c20131223021256616000_all-_dev.h5 
RNSCA-ROTCS_npp_d20131208_t0408168_e0417380_b00001_c20131223024038627000_all-_dev.h5 
RNSCA-ROTCS_npp_d20131208_t0548017_e0558002_b00001_c20131223021256603000_all-_dev.h5 
RNSCA-RVIRS_npp_d20131208_t0407405_e0417380_b00001_c20131223024038167000_all-_dev.h5 
RNSCA-RVIRS_npp_d20131208_t0547150_e0558377_b00001_c20131223021256099000_all-_dev.h5 

排序后(我的预期结果)

RATMS-RNSCA_npp_d20131208_t0408392_e0417432_b00001_c20131223024038606000_all-_dev.h5 
RCRIS-RNSCA_npp_d20131208_t0408392_e0417432_b00001_c20131223024038506000_all-_dev.h5 
RNSCA-ROLPS_npp_d20131208_t0408334_e0417550_b00001_c20131223024038619000_all-_dev.h5 
RNSCA-RONPS_npp_d20131208_t0408543_e0417005_b00001_c20131223024038636000_all-_dev.h5 
RNSCA-ROTCS_npp_d20131208_t0408168_e0417380_b00001_c20131223024038627000_all-_dev.h5 
RNSCA-RVIRS_npp_d20131208_t0407405_e0417380_b00001_c20131223024038167000_all-_dev.h5 

RATMS-RNSCA_npp_d20131208_t0547506_e0557586_b00001_c20131223021256522000_all-_dev.h5 
RCRIS-RNSCA_npp_d20131208_t0548226_e0557586_b00001_c20131223021256270000_all-_dev.h5 
RNSCA-ROLPS_npp_d20131208_t0548233_e0558223_b00001_c20131223021256591000_all-_dev.h5 
RNSCA-RONPS_npp_d20131208_t0548391_e0558002_b00001_c20131223021256616000_all-_dev.h5 
RNSCA-ROTCS_npp_d20131208_t0548017_e0558002_b00001_c20131223021256603000_all-_dev.h5 
RNSCA-RVIRS_npp_d20131208_t0547150_e0558377_b00001_c20131223021256099000_all-_dev.h5 

请注意在每个上述文件名中的第3(dYYYYMMdd)和第4(thhmmssS)领域。前缀字母'd'表示日期,前缀't'表示时间。

注意:'YYYYMMDD'表示划片的开始日期(YYYY:4位数年份; MM:月份; DD:日期)。第一个和第二个'hhmmssS'分别代表幅区的开始和结束(hh -hour; mm:分钟; ss:秒; S:十秒)。

我认为我的需求可以通过使用“YYYYMMdd_thh”组合来排序文件列表。我怎么能通过使用Linux bash脚本语言来做到这一点?

谢谢。

GoldenLee

回答

2

你会爱上bash。只需使用sort命令,就可以传递“字段分隔符”并选择要排序的字段。

从man-网页:

-t,--field分离器SEP = 使用SEP代替非空白空白过渡

-k,--key = KEYDEF 通过键排序; KEYDEF给出位置并键入

KEYDEF是F [.C] [OPTS] [,F [.C] [OPTS]用于开始和停止位置,其中 F是场号和C在一个字符位置领域;两者都是 原点1,停止位置默认为行结束。如果 -t和-b都不起作用,则字段中的字符将从前面的空格开头的 开始计数。 OPTS是一个或多个单一订单选项[bdfgiMhnRrV],它会覆盖该密钥的全局订购选项 。如果没有给出密钥,则使用整行作为 密钥。

所需的参数将成为:

sort -t '_' -k 3,4 you_data_file 

因此,我们已经划分您的数据为场的下划线,并分类对第一这是第3场(日期),然后第四(的时间) 。因为你对日期和时间的格式非常友善并且精度越来越高,所以只需按字母顺序排序即可。

+0

亲爱的Noctua:我刚刚测试你的方法。对我来说还好。非常感谢你! – GoldenLee

+0

从技术上讲,'sort'不是'bash'的一部分,你可以在其他shell中使用它(例如[zsh](http://zsh.org/)或[fish](http://fishshell.com/) ...) –

+0

这是一个无用的'cat',只是使用'sort -t'_'-k 3,4 your_data_file' –

相关问题