在 shell 脚本中将 4 位数年份转换为 2 位数

converting 4 digit year to 2 digit in shell script

我的文件为:

$cat file.txt
1981080512 14 15
2019050612 17 18
2020040912 19 95

此处第一列表示日期为 YYYYMMDDHH

我想将日期写为 YYMMDDHH。所以期望输出是:

81080512 14 15
19050612 17 18
20040912 19 95

我的脚本:

while read -r x;do
yy=$(echo $x | awk '{print substr([=13=],3,2)}')
mm=$(echo $x | awk '{print substr([=13=],5,2)}')
dd=$(echo $x | awk '{print substr([=13=],7,2)}')
hh=$(echo $x | awk '{print substr([=13=],9,2)}')

awk '{printf "%10s%4s%4s\n",'$yy$mm$dd$hh',,}'
done < file.txt

正在打印

81080512   14  15
81080512   17  18

请帮忙。谢谢。

请不要因为这个简单的答案而杀了我,但是这个呢:

cut -c 3- file.txt

您只需将字符 3 显示到每一行的末尾即可剪切前两位数字(-c 开关表示您需要剪切字符(不是字节,...))。

您可以使用单个 GNU AWKsubstr 如下所示,让 file.txt 内容成为

1981080512 14 15
2019050612 17 18
2020040912 19 95

然后

awk '{=substr(,3);print}' file.txt

输出

81080512 14 15
19050612 17 18
20040912 19 95

说明:我使用 substr 函数从第一列获取第 3 个及以后的字符并将其分配回所述列,然后我 print 这样更改的行。

(在 gawk 4.2.1 中测试)