在 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 AWK
的 substr
如下所示,让 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 中测试)
我的文件为:
$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 AWK
的 substr
如下所示,让 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 中测试)