cut 命令从时间中删除秒数。 shell 脚本

cut command to remove seconds from time. shell scripting

假设我们以

的格式将日期和时间记录到日志中
2022-05-18-11:57:140100

我需要从这个时间中删除秒数。这意味着最终输出应该像

 2022-05-18-11:57

我尝试了以下方法

echo "2022-05-18-11:57:140100" | rev | cut -d/ -f6- | rev`:"

这没有成功,我不知道这个剪切命令是如何工作的。谁能解释一下。提前致谢

第一个解决方案: 使用 GNU awk 你可以像下面那样简单地做。简单的解释是,将 FSOFS 设置为 :,然后在 awk 程序的主块中将 NF 减为 1 并打印该行。

echo "2022-05-18-11:57:140100" | awk 'BEGIN{FS=OFS=":"} NF--'

第二个解决方案:请在任何awk中使用awkmatch函数尝试以下。

echo "2022-05-18-11:57:140100" | awk 'match([=11=],/.*:/){print substr([=11=],RSTART,RLENGTH-1)}'

第三个解决方案:使用sed捕获组的能力(将值保存在临时缓冲区中)请尝试以下代码。

echo "2022-05-18-11:57:140100" | sed -E 's/(^[^:]*):([^:]*):.*/:/'

第四个解决方案(OP 的努力 FIX): 使用 rev + cut + [ 修复 OP 的努力=24=] 这里的组合。

echo "2022-05-18-11:57:140100" | rev | cut -d':' -f2- | rev

这可以在 bash shell 中轻松完成,另外:

s='2022-05-18-11:57:140100'
echo "${s%:*}"

2022-05-18-11:57

# or else use cut
cut -d: -f1-2 <<< "$s"
2022-05-18-11:57

# or sed
sed 's/:[^:]*$//' <<< "$s"
2022-05-18-11:57

这 5 种解决方案中的任何一种都适用于 gawkmawk-1mawk-2macos nawk

echo "2022-05-18-11:57:140100" | 

      mawk2   NF=NF   FS=':[^:]*$' OFS=
   or
      gawk -- --NF    FS=':[^:]*$'
   or 
      gawk    NF--    FS=':[^:]*$'
   or
      nawk    NF=1    FS=':[^:]*$'
   or
      mawk  '$!_=$!_' FS=':[^:]*$'

2022-05-18-11:57

最紧凑的版本应该是

mawk -F':[^:]*$' NF--