スクリプトにはいくつかのエラーがあります。以下を試してください:
#!/bin/bash
# capture the seconds since epoch minus 2 days
NOW=`expr $(date '+%s') - 172800`
# read every line in the file myfile.txt
while read -r line;
do
# remove the unwanted words and leave only the date info
s=`echo $line | cut -d ':' -f 2,4`
# parse the string s into a date and capture the number of seconds since epoch
date=$(date -d "$s" '+%s')
# compare and print output
if [ $date -lt $NOW ]; then
echo "Date Less then 2 days, s=$s, date=$date, now=$NOW"
else
echo "Date Greater then 2 days, s=$s, date=$date, now=$NOW"
fi
done < myfile.txt
しかし、これは動作しません。 $dateFile=grep "After :" myfile.txt | cut -d ':' -f 2,4
を。シェルでは変数名の前に接頭辞として$
を付けることはできません。シェルは結果を変数として評価し、コマンドを実行してそれを変数に代入するために、$(....)
またはバッククォートで囲む必要があります。変数としばらくに配管して
例:grepのと同時に配管
#!/bin/sh
dateFile=`grep "After :" my.txt | cut -d ':' -f 2,4`
# capture the seconds since epoch minus 2 days
NOW=`expr $(date '+%s') - 172800`
echo "$dateFile" | while read -r line;
do
# parse the string s into a date and capture the number of seconds since epoch
date=$(date -d "$line" '+%s')
# compare and print output
if [ $date -lt $NOW ]; then
echo "Date Less then 2 days, s=$line, date=$date, now=$NOW"
else
echo "Date Greater then 2 days, s=$line, date=$date, now=$NOW"
fi
done
例:これは、あなたの質問に明確に
#!/bin/sh
# capture the seconds since epoch minus 2 days
NOW=`expr $(date '+%s') - 172800`
grep "After :" myFile.txt | cut -d ':' -f 2,4 | while read -r line;
do
# parse the string s into a date and capture the number of seconds since epoch
date=$(date -d "$line" '+%s')
# compare and print output
if [ $date -lt $NOW ]; then
echo "Date Less then 2 days, s=$line, date=$date, now=$NOW"
else
echo "Date Greater then 2 days, s=$line, date=$date, now=$NOW"
fi
done
希望。
コードは完全に機能します。ありがとうございました。ファイル内のすべての行を読むためにループが必要なのはなぜだろうか?grepコマンドは自動的に必要な情報を得るでしょうか? – user1736786
私はあなたの質問に答えるために私の答えを編集しました。あなたがそれに満足すれば正解として選択してください。 – artemisian