특정 열의 숫자 빈도를 계산하는 방법은 무엇입니까?

특정 열의 숫자 빈도를 계산하는 방법은 무엇입니까?

아래에는 내 파일의 구조(파일 이름 = 1.txt)가 나와 있습니다. 행 3부터 시작해야 하는 첫 번째 열부터 시작하는 숫자의 빈도를 계산하고 싶습니다. 첫 번째 줄에는 411이 포함되어 있고 두 번째 줄에는 관심 없는 텍스트가 포함되어 있기 때문입니다.

다음을 사용하여 특정 숫자를 계산할 수 있습니다.

awk '($1==15){ ++count } END{ 인쇄 개수}' 1.txt> output.txt

내 파일 구조:

411
Lattice="156.0 0.0 0.0 0.0 156.0 0.0 0.0 0.0 156.0" 
1 410.0 2 1
2 1059.0 2 2
2 1060.0 2 3
3 2117.0 2 4
4 4726.0 2 5
5 3219.0 2 6
6 4744.0 2 7
7 4918.0 2 8
8 10686.0 2 9
9 11055.0 2 10
10 16475.0 2 11
11 14698.0 2 12
11 17430.0 2 13
12 15235.0 2 14
13 15799.0 2 15
14 21476.0 2 16
15 18561.0 2 17
15 18562.0 2 18
15 21595.0 2 19
15 21636.0 2 20
15 21684.0 2 21
16 24262.0 2 22
14 21475.0 2 23
17 24674.0 2 24

내가 원하는 출력

 1 1
 2 2
 3 1
 4 1
 .
 .
14 2
15 5

답변1

열 값으로 키가 지정된 연관 배열을 사용하여 세 번째 레코드(행)부터 시작하는 값만 할당할 수 있습니다( NR>2).

$ awk 'NR>2 {count[$1]++} END {for (i in count) print i, count[i]}' 1.txt
1 1
2 2
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 2
12 1
13 1
14 2
15 5
16 1
17 1

배열 순회 순서는 보장되지 않습니다. 출력 순서가 중요한 경우 추가 정렬이 필요할 수 있습니다.

답변2

아래 스크립트를 사용해보십시오. 훌륭하게 작동합니다.

for i in `awk 'NR >2 {print $1}' p.txt| sort -k1 -n -u`; do  echo $i; awk 'NR >2 {print $1}' p.txt|awk -v i="$i" '$1 == i {print $1}'| awk '{print NR}'| sed -n '$p'; done| sed "N;s/\n/ /g"

산출

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

관련 정보