使用 Perl:
perl -F, -ane 'printf "%dd %dh %dm %ds\n", int($F[2]/(24*60*60)), ($F[2]/(60*60))%24, ($F[2]/60)%60, $F[2]%60' file
-a 将每一行自动拆分为数组 @F
-F, 使用逗号作为分隔符自动拆分每一行
由于 Perl 数组从索引 0 开始,第三个元素是 $F[2]
输入:
a,b,28126265,d,e
a,b,6678363,d,e
a,b,3182862,d,e
a,b,11401914,d,e
a,b,1029092,d,e
a,b,9655690,d,e
a,b,34381431,d,e
a,b,13126178,d,e
a,b,2516335,d,e
输出:
325d 12h 51m 5s
77d 7h 6m 3s
36d 20h 7m 42s
131d 23h 11m 54s
11d 21h 51m 32s
111d 18h 8m 10s
397d 22h 23m 51s
151d 22h 9m 38s
29d 2h 58m 55s
由于您要保留现有数据:
perl -F, -ane 'printf "%s,%dd %dh %dm %ds,%s", (join ",",@F[0..1]), int($F[2]/(24*60*60)), ($F[2]/(60*60))%24, ($F[2]/60)%60, $F[2]%60, (join ",",@F[3..$#F])' file
@F[0..1]是数组@F前两个元素的数组切片
$#F是数组@F最后一个元素的索引
输出:
a,b,325d 12h 51m 5s,d,e
a,b,77d 7h 6m 3s,d,e
a,b,36d 20h 7m 42s,d,e
a,b,131d 23h 11m 54s,d,e
a,b,11d 21h 51m 32s,d,e
a,b,111d 18h 8m 10s,d,e
a,b,397d 22h 23m 51s,d,e
a,b,151d 22h 9m 38s,d,e
a,b,29d 2h 58m 55s,d,e
或者:
perl -F, -ane '$F[2] = sprintf "%dd %dh %dm %ds", int($F[2]/(24*60*60)), ($F[2]/(60*60))%24, ($F[2]/60)%60, $F[2]%60; print join ",",@F' file