Awk - подсчитать количество значений в столбце - PullRequest
0 голосов
/ 11 октября 2018

Моя цель - запустить код awk, чтобы проверить значение столбца 4 и присвоить ему счетчик его появления.Мои данные выглядят так:

DN  Area    Peri    FID DN2 Area2   Peri2   FID2  
1   70  39  1066    1   47  29  3  
1   70  39  1083    1   1142    262 11  
1   4662    465 1085    1   23  19  16  
1   4662    465 1085    1   47  29  9  
1   4662    465 1085    1   1142    262 11  
1   280 78  1087    1   513 126 18  
1   23  19  1093    1   47  29  12  
1   93  48  1094    1   93  48  19  
1   117 48  1100    1   466 136 17  
1   326 126 1131    1   723 223 54  
1   326 126 1131    1   513 126 18  
1   23  19  1135    1   723 136 32  
1   47  29  1138    1   1702    281 49  
1   187 87  1150    1   47  29  40  
1   23  19  1153    1   187 78  47  
1   2191    397 1156    1   23  19  24  
1   2191    397 1156    1   47  29  20  
1   2191    397 1156    1   5524    581 87  
1   256 87  1157    1   466 136 41  

Ожидаемый результат:

1  
1  
3  
3 I
3  
1  
1  
1  
1  
2  
2  
1  
1  
1  
1  
3  
3  
3  
1  

, когда я запускаю написанный мной код, я получаю '>', и команда не прекращает работу

awk '{if ( FNR>1 && count[$4]=i ) { for(i=1; i<=NR; ++i) printf "%d\n", i}} file

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Прочитайте файл дважды: сосчитайте вхождения в первом прогоне (NR==FNR) и распечатайте их во втором прогоне (FNR<NR).

awk 'FNR==NR{a[$4]++}FNR<NR{print a[$4]}' file file

Этот подсчет также включает заголовок,пропустите, если не хотите.

0 голосов
/ 11 октября 2018

За один проход вы можете сделать (при условии, что вы не хотите считать заголовок)

awk '{ a[NR]=$4; c[$4]++ }END{for(i=2;i<=NR;++i) print c[a[i]] }' file
0 голосов
/ 11 октября 2018

Не могли бы вы попробовать следующее.

awk 'FNR==NR{a[$4]++;next} FNR!=NR && FNR>1{print $4,a[$4]}'  Input_file Input_file

Выше будет напечатан 4-й столбец и значение его вхождения, если вам нужно только значение вхождения, затем удалите $4 из print части в приведенном выше коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...