2016-09-10 19 views
0

を定義したことがない私はawkプログラムやプログラムをwrtingだが、CMDAWK:機能asortiは

エラーの下に与え
$ awk -f prg.awk "subjects" 

以下でexceutingながら "連想配列"

{ 
    subj[$1]++ 
} 
END{ 

    n=asorti(subj, sorted) 
    for(k=1;k<=n;k++) 
    { 
     print(k" "sorted[k]) 
    } 
} 

をソートする必要があります。

awk:function asorti never defined

[入力ファイル]

Phy 
Math 
Math 
Science 
Bio 
Phy 

オペレーティングシステム:Ubuntuの16.04

除外のO/PのGnuで

Bio 1 
Math 2 
Phy 2 
Science 1 
+0

あなたはどのawkを使っていますか? –

+0

@JamesBrown Awk 4.1.3 – SeeTheC

+2

'print(foo" bar) 'を使わないでください。 'print'はAwkの演算子であり、関数ではありません。敬老は必要ありません。カンマで区切られた複数の引数を与えることができます。それらの値は、デフォルトで単一のスペースである 'OFS'(出力フィールドセパレータ)と、デフォルトで改行である' ORS'(出力レコードセパレータ)を伴って出力されます。だから、 'print k、sorted [k]'は慣用的です。 – Kaz

答えて

1

あなたはPROCINFO["sorted_in"]forスキャン順序を設定することができますawkは:

$ cat > foo.awk 
{ 
    a[$1]++ 
} 
END { 
    PROCINFO["sorted_in"]="@ind_str_asc" # scanning in index ascending order 
    for(i in a)       # for here uses above defined order 
     print i,a[i] 
} 
Bio 1 
Math 2 
Phy 2 
Science 1 

https://www.gnu.org/software/gawk/manual/html_node/Controlling-Scanning.html

+0

ありがとうございます。はい、試しました。それが来るの。しかし、私はどのようにo/pを達成することができます。被験者の頻度が来ない。 – SeeTheC

+0

これはおそらくあなたのコードがまだ存在しない 'sorted'配列を参照しているからでしょう。その配列は 'asorti'によって生成されると考えられていました。 – Kaz

+0

ありがとう@ジェームスブラウン。その働き。 – SeeTheC