-2

特定の日付(人の誕生日)をファイルに保存しています(例:01/02/1900)。年齢が20歳以上かどうか知りたい。シェルスクリプトを使用しています。

4

2 に答える 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 に答える