特定の日付(人の誕生日)をファイルに保存しています(例:01/02/1900)。年齢が20歳以上かどうか知りたい。シェルスクリプトを使用しています。
質問する
100 次
2 に答える
1
冗談ですが、必要なものを導き出すことができます。1行に1つの日付を読み取り/path/to/file.txt
、その人の年齢と20歳未満または20歳以上の人を出力します。
#!/bin/bash
while read DATE junk; do
QDATE=$(echo "$DATE" | sed 's#/#%2F#g')
ANS=$(curl -s "http://www.wolframalpha.com/input/?i=%28now+-+${QDATE}%29+in+years" | grep -Eo '"[0-9]+(\.[0-9]+)? years"')
AGE=$(echo "$ANS" | sed -r -e 's/"//g' -e 's/ years//g' -e 's/\..+//g')
if [ -z "$AGE" ]; then
echo "$DATE: ERROR occured"
continue
fi
if [ $AGE -ge 20 ]; then
echo "$DATE ($ANS): Person older or equal to 20 years"
else
echo "$DATE ($ANS): Person younger than 20 years"
fi
done < /path/to/file.txt
サンプル:
$ cat /path/to/file.txt
01/01/1900
08/11/1992
09/12/1992
$ bash test.sh
01/01/1900 ("112.9 years"): Person older or equal to 20 years
08/11/1992 ("20 years"): Person older or equal to 20 years
09/12/1992 ("19.92 years"): Person younger than 20 years
于 2012-11-08T12:02:31.340 に答える
0
GNU coreutilsを使用するLinux (つまり、すべての主要なLinuxディストリビューション)では、比較のために両方の日付を数値に変換するために使用できます。date
#!/bin/bash
# Arguments: <age-limit> <birth-date>
LIMIT=$(date --date="$1 years ago" +%s)
BIRTH=$(date --date="$2" +%s)
if [[ "$BIRTH" -gt "$LIMIT" ]]; then
echo "Birth-date less than $1 years ago"
else
echo "Birth-date at least $1 years ago"
fi
01/02/1900
などの日付文字列は、月/日の順序があいまいであることに注意してください。私のシステムとロケールdate
では、月が日の前にあると想定しています-YMMV。
于 2012-11-09T21:04:25.747 に答える