我的目标是运行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
答案 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操作(假设您不想计算标题)
awk '{ a[NR]=$4; c[$4]++ }END{for(i=2;i<=NR;++i) print c[a[i]] }' file