awkの配列に重複した項目があります。

awkの配列に重複した項目があります。

4つの列を持つファイルがあります。この4つの列を配列に入れてNRインデックスとして使用すると、アイテムが何とか繰り返されます。この問題の詳細については、以下を参照してください。

ファイルの最初の5行は次のとおりです。

-bash-4.2$ cat -ve file | head -n 5
chr start end p$
13 59341171 59343427 1.86642E-18$
10 72886545 72888679 1.13636E-09$
16 81900987 81902805 6.79697E-09$
1 46797890 46800143 2.24436E-08$

各行をとしてインデックス付けされた配列の項目として指定すると、配列のNR出力結果は次のようになります(前の5行は例です)。

-bash-4.2$ awk 'NR<6 {a[NR]=$0; 
>                     for(x in a)
>                     print x, a[x]}' file
1 chr start end p
1 chr start end p
2 13 59341171 59343427 1.86642E-18
1 chr start end p
2 13 59341171 59343427 1.86642E-18
3 10 72886545 72888679 1.13636E-09
4 16 81900987 81902805 6.79697E-09
1 chr start end p
2 13 59341171 59343427 1.86642E-18
3 10 72886545 72888679 1.13636E-09
4 16 81900987 81902805 6.79697E-09
5 1 46797890 46800143 2.24436E-08
1 chr start end p
2 13 59341171 59343427 1.86642E-18
3 10 72886545 72888679 1.13636E-09

ファイルに5行があることがわかりますが、項目は何度も繰り返されます。問題が何であるか、解決策を知りたいです。よろしくお願いします。

ベストアンサー1

NR < 6のすべての行に対して配列全体を印刷するように指示します。

配列を一度だけ印刷するには:後ろにこのNR < 6 {}ブロックはENDブロックにあります。

たとえば、

awk 'NR<6 { a[NR] = $0 }; 
     END  { for(x in a) print x, a[x] }' file
1 chr start end p
2 13 59341171 59343427 1.86642E-18
3 10 72886545 72888679 1.13636E-09
4 16 81900987 81902805 6.79697E-09
5 1 46797890 46800143 2.24436E-08

おすすめ記事