行から日付を選択し、現在の日付と比較して選択した行とは異なるフィールドを印刷します。

行から日付を選択し、現在の日付と比較して選択した行とは異なるフィールドを印刷します。

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使用するために保存する理由:datedate

    time_now=$(date -u +"%s")
    
  • echoコマンドの出力を変数に保存するのに役に立たないように使用します。

    difference=$((time_now - time_line))
    
  • 変数に保存する代わりに、if文で直接使用することもできます。

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

おすすめ記事