我在ksh / bash中编写此脚本并需要打印标题"计数差异"当两条线的输出不相等时。
文件名是test
fscsi0
fscsi0
fscsi0
fscsi0
fscsi1
fscsi1
fscsi1
然后:
cat test |awk '{b[$1]++}; END { for(a in b) printf("%25s %8d\n", a, b[a])}'
fscsi0 4
fscsi1 3
答案 0 :(得分:0)
保持OP的过滤器,为什么不简单地将大量小工具堆叠到长管道中?我们走了:
因为总是只有2个评估组来汇总/计算行数:
if [ "$(cat so_diff_line_grouped_sum.txt |awk '{b[$1]++}; END { for(a in b) printf("%25s %8d\n", a, b[a])}' | tr -s ' ' | cut -f 3 -d ' ' | uniq | wc -l | tr -d ' ')" -ne 1 ]; then printf "Difference in count\n"; fi
应该有效。它以so_diff_line_grouped_sum.txt:
的输入产生fscsi0
fscsi0
fscsi0
fscsi0
fscsi1
fscsi1
fscsi1
结果:
Difference in count
在文件中添加一个条目fscsi1并重新运行它没有输出。
我使用bash,手头没有ksh ......
分成多行(为了便于阅读):
linecount="$(cat so_diff_line_grouped_sum.txt |\
awk '{b[$1]++}; END { for(a in b) printf("%25s %8d\n", a, b[a])}' |\
tr -s ' ' | cut -f 3 -d ' ' | uniq | wc -l | tr -d ' ')"
if [ $linecount != 1 ]
then printf "Difference in count\n"
fi
拿起
答案 1 :(得分:0)
假设您无法更改现有程序:
... | awk 'p && p != $2 { print "There is a difference!" }{p=$2}'
答案 2 :(得分:0)
为什么不呢......
awk '{a[$1]++} END{n=asort(a); if(a[1]!=a[n]) print "Different!"}'
也可以处理两个以上的块。