10

いくつかのパターンに従って入力ファイルをフィルタリングし、いくつかの計算に strftime() 関数を使用する AWK スクリプトを作成しようとしています。

($2 ~ /^[HB]/ && $2 ~ /n$/){
        print strftime("%Y")
}

使用中のインタプリタは mawk です。このコマンドを使用してこのスクリプトをトリガーする場合:

awk -f script3 inputFile

エラーが表示されます:「関数 strftime が定義されていません」

4

2 に答える 2

14

GAWK をインストールすると、awk でネイティブに欠落している関数 strftime が返されます。

Ubuntu 11.10 または類似のディストリビューションでは、次のコマンドを発行して GAWK を取得します。

sudo apt-get install gawk

gawk で使用することもできますが、その必要はなく、元の awk スクリプトをそのまま使用できます。

于 2011-09-11T22:30:48.973 に答える
3

まあ、明らかに、mawkにはstrftime関数がありません。

私はここにmawkを持っていないので、テストされていません:

awk -f script -v the_year=$(date "+%Y") inputFile

そしてscript持っている(2つの正規表現を組み合わせる:

$2 ~ /^[HB].*n$/ { print the_year }

年がなんらかの理由で$0から来る場合は、文字列からそれを解析できるはずです。あなたの入力についての詳細を教えてください。

編集

入力は、「12768 Ashwari F20111985」のようないくつかの行で構成されています。基本的に、BまたはHで始まり、nで終わる名前を持つすべてのものをフィルタリングする必要があります。さらに、フィルタリングされた各学生の年齢を計算し、グループ全体の平均年齢を調べる必要があります。

awk -v this_year=$(date +%Y) -v today=$(date +%Y%m%d) '
    $2 ~ /^[BH].*n$/ {
        age = this_year - $6
        if (today < $6 $5 $4) { age-- } # I assume those fields are the birthday 
        total_age += age
        count ++
        print $2 " is " age " years old"
    }
    END {
        print "average age = " total_age/count
    }
' inputFile
于 2010-09-10T12:21:22.063 に答える