I S*_*ngh 2 bash perl sed awk 14.04
感谢各种贡献者解决了我之前的请求。
我需要在日期列中添加分钟以获取新的日期时间戳值。我有一个文件:afile.txt
1,2012-02-16,abc,aa,455,340
3,2015-02-16,dsa,dl,350,200
2,2015-02-16,aws,sw,555,180
4,2015-02-16,yyz,aa,1220,210
Run Code Online (Sandbox Code Playgroud)
我使用过 awk(之前由贡献者提供给我)-
awk -F, '/,/ {
printf "%s, %s, %s, %s, %s %02d:%02d, %s\n",
$1, $2, $3, $4,
$2, int($5 / 100), $5 % 100,
$6
}' afile.txt > bfile.txt
bfile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 340
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 200
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 180
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 210
Run Code Online (Sandbox Code Playgroud)
我想添加第 5 列和第 6 列并获取新的时间戳。
非常感谢您的帮助。
我假设最后一个字段应该以与倒数第二个相同的方式解释,即340意味着 3 小时 40 分钟的偏移量。
如果这是正确的,那么您可以使用 GNU awk 的时间函数
awk '
BEGIN{FS=","; OFS=", "}
{
split($2,d,"-");
t0 = mktime(d[1]" "d[2]" "d[3]" "int($5 / 100)" "$5 % 100" 0");
$5 = strftime("%Y-%m-%d %H:%M", t0);
$6 = strftime("%Y-%m-%d %H:%M", t0 + 3600 * int($6 / 100) + 60 * ($6 % 100))
} 1' afile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 2012-02-16 08:35
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 2015-02-16 05:50
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 2015-02-16 08:15
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 2015-02-16 14:30
Run Code Online (Sandbox Code Playgroud)
如果最后一个字段只是分钟,那么数学计算$6更容易:
awk '
BEGIN{FS=","; OFS=", "}
{
split($2,d,"-");
t0 = mktime(sprintf("%d %d %d %d %d 0", d[1], d[2], d[3], int($5 / 100), $5 % 100));
$5 = strftime("%Y-%m-%d %H:%M", t0);
$6 = strftime("%Y-%m-%d %H:%M", t0 + 60 * $6) } 1' afile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 2012-02-16 10:35
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 2015-02-16 07:10
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 2015-02-16 08:55
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 2015-02-16 15:50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |