아래에는 내 파일의 구조(파일 이름 = 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