Bob*_*bby 5 unix bash shell awk
我有以下记录列表
Item1,200
Item1,200
Item3,900
Item2,500
Item2,800
Item1,600
Item4,
Item5,
Item4,100
Item5,
Item5,444
Run Code Online (Sandbox Code Playgroud)
我的输出应该是
"Please check the file as Item1 is greater than 2"
Run Code Online (Sandbox Code Playgroud)
使用我的 awk 命令,输出是(计算空格),但它不应该
Item1 3
Item2 2
Item3 1
Item4 2
Item5 3
Run Code Online (Sandbox Code Playgroud)
Unix命令应该计算上面列表中没有空格的项目,如果任何项目的计数大于2(没有空格),应该返回一个语句“请检查记录”。
我尝试过使用下面的 awk 命令,但无法过滤空白并获得大于 2 条记录的计数。
awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' filetest.txt
Run Code Online (Sandbox Code Playgroud)
考虑到您需要排序形式的输出,请尝试以下一次。
awk -F, '$2{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file
Run Code Online (Sandbox Code Playgroud)
输出如下。
Item1 3
Item2 2
Item3 1
Item4 1
Item5 1
Run Code Online (Sandbox Code Playgroud)
编辑:由于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]}}}}'
Run Code Online (Sandbox Code Playgroud)
或者
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
Run Code Online (Sandbox Code Playgroud)
输出如下。
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
Run Code Online (Sandbox Code Playgroud)
EDI2:现在也根据OP的要求添加一个解决方案。这将忽略与每个 $1 值相关的 $2 的任何重复计数。
awk -F, '$2 && !array2[$1,$2]++{array[$1]++} END{for(k in array){print k,array[k] | "sort -k1"}}' Input_file
Run Code Online (Sandbox Code Playgroud)
输出如下。
Item1 2
Item2 2
Item3 1
Item4 1
Item5 1
Run Code Online (Sandbox Code Playgroud)