AWK-计算列中某个值的出现

时间:2018-10-11 06:48:28

标签: linux awk

我的目标是运行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 :(得分:1)

请您尝试以下。

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

如果仅需要出现值,则上面将打印第4列及其出现值,然后从上述代码的$4部分中删除print

答案 1 :(得分:1)

读取文件两次:计算第一次运行(NR==FNR)中的出现次数,并在第二次运行(FNR<NR)中将它们打印出来。

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

此计数还包括标题,如果不希望,请跳过。

答案 2 :(得分:0)

您只需完成一次操作(假设您不想计算标题)

awk '{ a[NR]=$4; c[$4]++ }END{for(i=2;i<=NR;++i) print c[a[i]] }' file