将月份数字转换为月份名称

将月份数字转换为月份名称

有没有办法用脚本将月份数字转换为名称?

例子:

2013-10-22会变成Oct 22

谢谢。

顺便说一句,我没有 GNU 日期并且我的操作系统是 AIX。

答案1

你应该有一个可用的awk(或nawk):

BEGIN {
    nmon=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",month)
    for(mm=1;mm<=nmon;mm++) {
        month[month[mm]]=mm
        month[sprintf("%02i",mm)]=month[mm]
    }
}

/[12][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]/ {
    split($1,bits,/-/)
    printf("%s %02i\n",month[bits[2]],bits[3])
}

BEGIN{}块创建了一个映射哈希。它的用途比您严格需要的更通用一些(我碰巧有它),它的索引是短名称、月份序数(数字)和带前导零的两位数月份序数。这意味着您可以将名称转换为数字或反之亦然。您也可以轻松地将其调整为长月份名称(可能还有本地化,但我们不要太过分)。

下一个块查找包含可能的日期字符串的行,在“-”处拆分并转换日期。(这也适用于gawk,但如果您恰好有,那么strftime()mktime()是更优雅的解决方案。)

基本kshshell 版本,因为 AIX 具有ksh

set -A month pad Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

while IFS=- read yyyy mm dd junk; do
    echo ${month[$mm]}
done

这使用大批(POSIXsh没有数组,bash但有,所以你也可以用它做类似的事情)。请注意,这依赖于ksh处理月份数字中的前导 0,它只是将其视为整数。由于ksh(和bash) 数组是从零开始的,我们将一个虚拟的“填充”值填充到索引 0 中,而不是在索引上使用 +1/-1。

答案2

date +"%B %d"

将显示January 1

date +"%b %d"

将显示Jan 1

相关内容