TL; DR
这个想法是:
awk '{
IP[$1]++;
}
END {
for(var in IP)
print IP[var]
}
}' getline < sockstat | awk '{print $2 "@" $3}' | grep -v '^PROCESS@PID'
我想计算输出中每个块的实例数 - &gt; sockstat | awk'{print $ 2“@”$ 3}'| grep -v'^ PROCESS @ PID'
看起来像:
ubuntu-geoip-pr@2382
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
chrome@2453
rhythmbox@4759
rhythmbox@4759
rhythmbox@4759
最后,我希望输出为:
1
8
3
这对应于先前输出中每个项目的出现次数。
完整问题:
sockstat 命令输出localhost的某些网络统计信息。我首先从输出(分别为PROCESS和PID)的第二和第三列打印出一个单键,格式为PROCESS @ PID。然后,我想从该输出计算每个唯一键的频率。一种方法是使用awk getline结构,但这似乎适用于文件,我无法直接从上面的命令拉取输入。
我不想使用临时文件,因为这会消除解决方案的优雅。
答案 0 :(得分:1)
sockstat | awk '{print $2 "@" $3}' | grep -v '^PROCESS@PID' | sort | uniq -c | awk '{print $1}'
答案 1 :(得分:0)
这个怎么样?
sockstat | grep -v PROCESS | awk '{key=$2"@"$3; count[key]++} END {for ( key in count ) { print key" "count[key]; } }'
答案 2 :(得分:0)
您可以简化命令:
sockstat | awk 'NR>1 { a[$2 "@" $3]++ } END { for (i in a) print a[i], i }'
如果您只想要计数,只需编辑打印语句:
sockstat | awk 'NR>1 { a[$2 "@" $3]++ } END { for (i in a) print a[i] }'