linux - 如何使用shell将字符串分割成正确的格式?

标签 linux bash shell awk command-line

我有这个带有持续时间的文件。有些有日期,但大多数采用 hh:mm 形式。整个形式为dd+hh:mm 我试图将它们“tr -s '+:' ':'” 转换为 dd:hh:mm 形式,然后 split($1,tm,":") 将它们计算为秒。 然而,我面临的问题是,在这个操作之后,带有 hh:mm 的形式在 tm[1] 中将有 hh,但如果它是 dd:hh:mm 那么 tm[1] 将是 dd。 有没有办法把 hh 形式的 hh:mm 放入 tm[2] 并把 tm[1] 设为 0?

4+11:26 
10+06:54 
20:27

是输入

我想要的输出是(以 tm[1]、tm[2]、tm[3] 的形式):

4 11 26 
10 06 54 
0 20 27

最佳答案

我首先使用 sed 对其进行预处理(在没有加号的行中添加缺少的 0+),然后将 tr +: 添加到空格:

cat a.txt | sed 's/^\([^+]\+\)$/0+\1/g' | tr  '+:' '  '

或者按照 Lars 的建议,较短的 sed 版本:

cat a.txt | sed '/+/! s/^/0+/;' | tr  '+:' '  '

关于linux - 如何使用shell将字符串分割成正确的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533588/

相关文章:

PHP shell_exec 不适用于两个不同的应用程序版本

bash - 使用 `read` 时如何启用向上/向下箭头键以显示以前的输入?

linux - 如何在 shell 脚本变量中使用 {old,new}name?

linux - bash 测试范围内的数字(带 float )

linux - 如何使用 bash shell 创建新的启动器?

linux - 使用 shell 脚本获取多行 XML 中的标签值

bash - 提示用户输入并在等待 x 秒后取消提示

Bash grep 避免检查目录

linux - 如何选择目录中的所有文件并运行命令

linux - 如何为 Linux (Arch) 手动安装旧版本的 unity (2019)