【问题标题】: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 年),并且它们的名称始终如我所述。我可以做一个很长的案例陈述,但寻找一种更优雅的方式......

标签: bash date


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 2010-12-11
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多