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

관련 정보