我有以下记录列表
Item1,200
Item1,200
Item3,900
Item2,500
Item2,800
Item1,600
Item4,
Item5,
Item4,100
Item5,
Item5,444
我的输出应该是
"Please check the file as Item1 is greater than 2"
使用我的awk命令输出是(计算空白),但它不应该
Item1 3
Item2 2
Item3 1
Item4 2
Item5 3
Unix命令应该计算上面列表中没有空格的项目,并且如果任何项目的计数大于2(没有空格),则应该返回“请检查记录”。
我尝试使用下面的awk命令,但无法过滤空白并获得大于2条记录的数据。
awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt
答案 0 :(得分:2)
您可以在命令前使用$ 2来检查第二个字段是否存在。同样,在命令列表前面使用$ 3来查看是否存在第三个字段,然后写入错误消息。
awk -F, '$3 {print "Please check the records: $_"}; $2 {a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt
答案 1 :(得分:1)
尝试关注一次,考虑到您需要以排序形式输出。
awk -F, '$2{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file
输出如下。
Item1 3
Item2 2
Item3 1
Item4 1
Item5 1
编辑:由于OP要求提供第一个和第二个字段的计数,请您试试。
awk -F, '$2{array[$1]++;array2[$1" "$2]++;array3[$2]++} END{for(u in array){for(y in array3){if(array2[u" "y]){print u,array[u],y,array2[u" "y]}}}}'
或强>
awk -F, '$2{
array[$1]++;
array2[$1" "$2]++;
array3[$2]++
}
END{
for(u in array){
for(y in array3){
if(array2[u" "y]){
print u,array[u],y,array2[u" "y]
}
}
}
}' Input_file
输出如下。
Item1 3 200 2
Item1 3 600 1
Item2 2 500 1
Item2 2 800 1
Item3 1 900 1
Item4 1 100 1
Item5 1 444 1
EDI2 :按照OP的要求再添加一个解决方案。对于每个1美元的价值,OMMIT的任何重复计数为2美元。
awk -F, '$2 && !array2[$1,$2]++{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file
输出如下。
Item1 2
Item2 2
Item3 1
Item4 1
Item5 1
答案 2 :(得分:0)
在检查空白字段时添加条件($ 2! - "")
awk -F, '$2 != "" {a[$1]++;} END {for (i in a) { if (a[i] > 2) { print "Check the records for"i } } }' filetest.txt
结果:
Check the records for Item1