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 ]