从一行中选择日期并与当前日期进行比较并打印与所选行不同的字段

从一行中选择日期并与当前日期进行比较并打印与所选行不同的字段

我有命令从与当前日期进行比较的行中获取日期,我希望从if-then语句中的同一行打印另一个字段。

cat /tmp/OutPrint |cut -d' ' -f 2 | while IFS= read line; do
    
    now=$(date | cut -d' ' -f 4)
    
    time_now=$(date -u -d "$now" +"%s")   #seconds
    time_line=$(date -u -d "$line" +"%s") #seconds
    
    difference=$(echo $((time_now - time_line)))
    
    if [ $difference -ge 2592000 ] 
    then
        echo "Time difference is greater than 30 days"
    else 
        echo "Time difference is less than 30 days"
    fi
done

以下是我的文件内容,我将其中的日期与当前日期进行比较。如果差异超过 30 天,我需要在then报表中打印第一个字段。

如何打印then报表中的第一个字段?

输入:

anhtdg5 03-Jul-2019  
kjushr7 04-Aug-2020  
bhyusj3 09-Mar-2017  
losyej9 09-Mar-2017  
nhtgsy57 09-Mar-2017  
bpolise3 09-Mar-2017  
uioshye2 14-Mar-2018   
zsethfyu 23-Nov-2018  
cnhysge 23-Mar-2018  

答案1

您想使用第一个字段,但cut在将其发送到 之前将其关闭while

为什么不简单地使用read来分隔字段:

while read name date; do
    ...
    time_line=$(date -u -d "$date" +"%s")
    ...
    echo "$name"
done < /tmp/OutPrint

您的脚本有几个额外的复杂符号,它们以某种方式工作,但可以用更好的方式编写:

  • 无用的使用cat

  • 为什么保存中间$now变量以供使用date而不是date直接使用:

    time_now=$(date -u +"%s")
    
  • 无用地使用echo将命令的输出保存到变量:

    difference=$((time_now - time_line))
    
  • 您还可以直接在 if 语句中使用它,而不是保存到变量:

    if [ $((time_now - time_line)) -ge 2592000 ]
    

相关内容