我有一个包含 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