[英]how to sort the timestamp in a filename in shell script
如何將_tm1.csv之前的時間戳從最舊到最新進行排序,如果_是分隔符,則時間戳始終在_tm1.csv之前,即倒數第二個片段,它將是時間戳。
alex_li_20140301121212_tm1.csv
alex_cf_li_20140302121212_tm1.csv
B_A_cf_li_20140303121212_tm1.csv
您可以使用:
awk -F_ '{print $(NF-1), $0}' file | sort -nk1 | cut -d' ' -f2-
alex_li_20140301121212_tm1.csv
alex_cf_li_20140302121212_tm1.csv
B_A_cf_li_20140303121212_tm1.csv
ls | sed 's/^.*_\([0-9]\+\)_.*$/\1,\0/' | sort -g | cut -d, -f 2
這是使用GNU awk
多合一解決方案:
awk -F_ '{
ts[$(NF-1),$0]++
}
END {
n = asorti(ts, ts_s);
for(x = 1; x <= n; x++) {
split(ts_s[x], tmp, SUBSEP);
print tmp[1], tmp[2]
}
}' file
或單線,如果您願意:
awk -F_ '{ts[$(NF-1),$0]++}END{n=asorti(ts,ts_s);for(x=1;x<=n;x++){split(ts_s[x],tmp,SUBSEP);print tmp[1],tmp[2]}}' file
輸出 (我修改了您的輸入文件以演示排序)
$ cat file
alex_li_20140301121212_tm1.csv
alex_cf_li_20130302121212_tm1.csv
B_A_cf_li_20120303121212_tm1.csv
$ awk -F_ '{ts[$(NF-1),$0]++}END{n=asorti(ts,ts_s);for(x=1;x<=n;x++){split(ts_s[x],tmp,SUBSEP);print tmp[1],tmp[2]}}' file
20120303121212 B_A_cf_li_20120303121212_tm1.csv
20130302121212 alex_cf_li_20130302121212_tm1.csv
20140301121212 alex_li_20140301121212_tm1.csv
如果您在輸出中不需要timestamp
,則只需執行print tmp[2]
。 喜歡:
$ awk -F_ '{ts[$(NF-1),$0]++}END{n=asorti(ts,ts_s);for(x=1;x<=n;x++){split(ts_s[x],tmp,SUBSEP);print tmp[2]}}' file
B_A_cf_li_20120303121212_tm1.csv
alex_cf_li_20130302121212_tm1.csv
alex_li_20140301121212_tm1.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.