我有命令从与当前日期进行比较的行中获取日期,我希望从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 ]