将两位数年份转换为四位数

Posted

技术标签:

【中文标题】将两位数年份转换为四位数【英文标题】:Convert two digit year to four digits 【发布时间】:2019-07-07 15:21:46 【问题描述】:

在 bash 中字

我的文件格式为:test96abcd.TXT 我正在提取两位数的年份:

echo "test96abcd.TXT" | cut -c4-5

我希望做这样的事情:

echo "test96abcd.TXT" | cut -c4-5 | date +%Y

但它不起作用,更不用说我会遇到...Y2K 问题(当它是 00 时,不知道是 1900 年还是 2000 年)虽然我可以使用“手动处理这个异常”如果 00 使用 2000”。

但是有没有更优雅的方法来使用“日期”命令来处理这个问题?

【问题讨论】:

没关系00s - 你怎么知道日期XX 应该永远是20XX 还是19XX 或其他什么?如果您只想将每个XX 更改为20XX,那么您不需要date。您的文件是否总是有 2 位数字且仅在 1 个位置只有 2 位数字,或者您能否获得 foo76bar83etc.txtfoo1234bar.txt 之类的文件,如果是,应如何处理? 我知道我的日期是从 1980 年到今天(不会超过 2030 年),并且它们的名称始终如我所述。我可以做一个很长的案例陈述,但寻找一种更优雅的方式...... 【参考方案1】:
$ cat ../tst.sh
#!/bin/env bash

for old; do
    [[ $old =~ ^([^0-9]*)(([0-9]*).*) ]] || continue
    year=$BASH_REMATCH[3]
    if (( year > 80 )); then
        cent='19'
    else
        cent='20'
    fi
    new="$BASH_REMATCH[1]$cent$BASH_REMATCH[2]"
    mv -- "$old" "$new"
done

$ ls
test00abcd.txt  test17abcd.txt  test96abcd.txt

$ ../tst.sh *

$ ls
test1996abcd.txt  test2000abcd.txt  test2017abcd.txt

【讨论】:

以上是关于将两位数年份转换为四位数的主要内容,如果未能解决你的问题,请参考以下文章

sap货币位数

如何在六位数子串的每两位数之间添加点?

excel表格中的数字有一位数、两位数、三位数,可是排序只按第一位数排,怎样才能按1到10000的自然顺序排呢

python进阶练习之——求未知数❤️

三重循环实现四位的吸血鬼数

如何口算十一位数乘十一位数