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

相关内容