2011-07-13 10 views
0

単純な配列をループする方法を理解するのに苦労しています。私はthis text fileを持っています。基本的に私の目標は、数字とaで始まるすべての行を選択することです(英語では1位、2位、3位、4位などと等価です)。だから私はこのコードを書いた:ループ配列の問題

#!/usr/bin/awk -f 
BEGIN{FS="\t"} 
/[0-9]+a/ {for (i=1; i<NR; i++) { score[i]=$3 } for (i=1; i<NR; i++) {print i, score[i]}} 

を、これは私が取得していますクレイジー出力されます:

1 25 
1 20 
2 20 
1 16 
2 16 
3 16 
1 13 
2 13 
3 13 
4 13 
1 11 
2 11 
3 11 
4 11 
5 11 
1 10 
2 10 
3 10 
4 10 
5 10 
6 10 
1 9 
2 9 
3 9 
4 9 
5 9 
6 9 
7 9 
1 8 
2 8 
3 8 
4 8 
5 8 
6 8 
7 8 
8 8 
1 7 
2 7 
3 7 
4 7 
5 7 
6 7 
7 7 
8 7 
9 7 
1 6 
2 6 
3 6 
4 6 
5 6 
6 6 
7 6 
8 6 
9 6 
10 6 
1 5 
2 5 
3 5 
4 5 
5 5 
6 5 
7 5 
8 5 
9 5 
10 5 
11 5 
1 4 
2 4 
3 4 
4 4 
5 4 
6 4 
7 4 
8 4 
9 4 
10 4 
11 4 
12 4 
1 3 
2 3 
3 3 
4 3 
5 3 
6 3 
7 3 
8 3 
9 3 
10 3 
11 3 
12 3 
13 3 
1 2 
2 2 
3 2 
4 2 
5 2 
6 2 
7 2 
8 2 
9 2 
10 2 
11 2 
12 2 
13 2 
14 2 
1 1 
2 1 
3 1 
4 1 
5 1 
6 1 
7 1 
8 1 
9 1 
10 1 
11 1 
12 1 
13 1 
14 1 
15 1 

と私はそれが可能であるかを理解していません。私に助けてもらえますか?

+0

今では私はNRが合計ではありません考え出しました行数ですが、新しい行が処理されるたびに更新されます。今度は、私の配列にスコアを正しく保存する方法を知る必要があります。 – haunted85

答えて

0

あなたはそのための配列必要はありません。

awk '/^[0-9]a/' YOURINPUT 
1a  25 
2a  20 
3a  16 
4a  13 
5a  11 
6a  10 
7a  9 
8a  8 
9a  7 
+0

はい、私は別のタスクを実行するために必要なので実行します。 – haunted85

+0

その場合は@mbqの答えを見てください –

1

awkの配列はハッシュむしろですが、データとそれらを供給しても問題ないし。あなただけの必要があります。

/[0-9]+a/{scores[$1]=$2} 

scores['1a']=25scores['3a']=16など

あなたはできる、それがためにインループ使っかかわらループ:

/END/{for(e in scores) print(e,scores[e])}