date - 在awk中将数字日期转换为字母
问题描述
我有一个文件:ifile.txt
83080603 55 72
87090607 83 87
88010612 82 44
89080603 55 72
00110607 83 87
01030612 82 44
05120618 84 44
第一列显示日期和时间,格式为 YYMMDDHH。
我想将第一列打印为 hrHDDMMMYYYY ofile.txt
03H06Aug1983 55 72
07H06Sep1987 83 87
12H06Jan1988 82 44
and so on
我无法将数字月年转换为文本月。我的脚本是
awk '{printf "%s%5s%5s\n",
substr($0,7,2)"H"substr($0,5,2)substr($0,3,2)substr($0,1,2), $2, $3}' ifile.txt
解决方案
编辑:根据 OP 的评论添加解决方案,在此处根据条件添加年份。
awk -v curr_year=$(date +%y) '
BEGIN{
num=split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",arr,",")
for(j=1;j<=num;j++){
key=sprintf("%02d",j)
months[key]=arr[j]
}
}
{
year=substr($1,1,2)>=00 && substr($1,1,2)<=curr_year?"20":"19"
$1=substr($1,length($1)-1)"H"substr($1,length($1)-3,2) months[substr($1,3,2)] year substr($1,1,2)
print
year=""
}
' Input_file
您能否尝试以下操作,在移动设备上编写并在网站上成功测试https://ideone.com/4zYMu7 这也假设由于您的 Input_file 前 2 个字母表示年份,并且您只想打印 19 以防万一还有其他逻辑得到确切的年份然后请务必提及
awk '
BEGIN{
num=split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",arr,",")
for(j=1;j<=num;j++){
key=sprintf("%02d",j)
months[key]=arr[j]
}
}
{
$1=substr($1,length($1)-1)"H"substr($1,length($1)-3,2) months[substr($1,3,2)] "19" substr($1,1,2)
print
}
' Input_file
推荐阅读
- google-cloud-platform - GCP IoT Core 拒绝公钥并显示“证书采用无效的 PEM 格式”错误消息。有什么问题?
- r - 关于使用 dplyr 的组内平均值
- r - 如何偏移 ax limited 图上的第一个点,使其不在 R 中的 y 轴上?
- memory - 为什么我在 SDL_UpdateTexture 中有“LockRect(): INVALIDCALL”?
- python - 尝试合并嵌套列表中重复键的值
- php - iframe 会话丢失
- html - 我应该如何为具有不同像素比的设备加载图像?
- c# - .NET Core 将单个属性传递给局部视图
- c# - Asp.Net Core url 引用为空
- r - 我想摆脱未使用的空间