我有大量的文件名为 A2012178.1220.051.2012178233531.hdf 那里,从第2个字符到第8个字符是日期,年份加上朱利安日。从第13个字符到文件的扩展名称对我来说是垃圾...所以我想重命名文件并转换日期(为方便起见)。
到目前为止,我可以在bash中转换日期
CONVERTED=$(date -d "${Year}-01-01 +${JulianDay} days -1 day" "+%Y%m%d")
但我不知道如何从文件名中读取年份和朱利安日,并在bash脚本中替换名称....
有什么想法吗?
答案 0 :(得分:2)
使用参数替换来获取子串:
name="A2012178.1220.051.2012178233531.hdf"
Year=${name:1:4}
JulianDay=${name:5:3}
答案 1 :(得分:0)
棘手的部分是朱利安日的长度可变,所以你不知道如何将它切成片。所以,你可能会这样做:
read begin date end < <(echo $filename | sed -e 's/\(.\)\([[:digit:]]\+\)\(.*\)\
/\1 \2 \3/')
Year=${date::4}
JulianDay=${date:4}
newdate=$(date -d "${Year}-01-01 +${JulianDay} days -1 day" "+%Y%m%d")
mv $filename "${begin}${newdate}${end}"
这基本上将文件名拆分为拉出日期字段,然后将前4位数字作为年份,其余为朱利安日。
(这假设julian日不是0填充,这在你的问题中是不明确的。如果它是零填充,则更容易)。