Linux 如何使用shell将字符串拆分为正确的格式?
我有这个文件的持续时间。有些有天,但大部分是以hh:mm的形式。整个表单是dd+hh:mm 我试图将它们“tr-s'+:'':''”转换成dd:hh:mm格式,然后将($1,tm,'':'')计算成秒。 但是,我面临的问题是,在执行此操作后,带有hh:mm的表单将在tm[1]中包含hh,但如果其dd:hh:mm,则tm[1]将是dd。 有没有办法将hh:mm形式的hh放入tm[2]并将tm[1]设为0Linux 如何使用shell将字符串拆分为正确的格式?,linux,bash,shell,awk,command-line,Linux,Bash,Shell,Awk,Command Line,我有这个文件的持续时间。有些有天,但大部分是以hh:mm的形式。整个表单是dd+hh:mm 我试图将它们“tr-s'+:'':''”转换成dd:hh:mm格式,然后将($1,tm,'':'')计算成秒。 但是,我面临的问题是,在执行此操作后,带有hh:mm的表单将在tm[1]中包含hh,但如果其dd:hh:mm,则tm[1]将是dd。 有没有办法将hh:mm形式的hh放入tm[2]并将tm[1]设为0 4+11:26 10+06:54 20:27 输入是什么 我想要的输出是(以tm[1]、
4+11:26
10+06:54
20:27
输入是什么
我想要的输出是(以tm[1]、tm[2]、tm[3]的形式):
我首先用sed对其进行预处理(在没有加号的行中添加缺少的
0+
),然后将tr
+:
添加到空格:
cat a.txt | sed 's/^\([^+]\+\)$/0+\1/g' | tr '+:' ' '
或者按照LAR的建议,更短的sed
版本:
cat a.txt | sed '/+/! s/^/0+/;' | tr '+:' ' '
awk
救援
您可以在awk
中进行转换和计算,使用输入文件将值转换为分钟
$ awk -F: '{if($1~/+/){split($1,f,"+");h=f[1]*24+f[2]}
else h=$1; m=h*60+$2; print $0 " --> " m}' file
4+11:26 --> 6446
10+06:54 --> 14814
20:27 --> 1227
请显示您的输入和期望的输出。刚刚添加。谢谢你提醒我!我将首先尝试通过插入缺少的天数来规范化输入,然后在sed:
sed'/+/!s/^/0+/;s/[+:]//g;'你的文件确实有用!非常感谢!
$ awk -F: '{if($1~/+/){split($1,f,"+");h=f[1]*24+f[2]}
else h=$1; m=h*60+$2; print $0 " --> " m}' file
4+11:26 --> 6446
10+06:54 --> 14814
20:27 --> 1227