http://0-0.latam.corp.yahoo.com/ 6656
http://0-0.latam.corp.yahoo.com/nonEtAk 6670
http://1.avatar.yahoo.com/ 6644
http://1.avatar.yahoo.com/nonEtAk 6858
这里第一列列出了 url,第二列列出了响应长度。 “/nonEtAk”是一些不存在的路径,“/”是现有的路径。
通过将不存在路径的响应与现有路径的响应进行比较,我想提取不会给出误报响应的网址。所以我发现这可以通过比较响应长度来完成。所以数据就是这样的。因此,在域相同的情况下,我想比较第二列并将输出作为域。
例如上面0-0.latam.corp.yahoo.com/
给出的6656
长度 和
0-0.latam.corp.yahoo.com/nonEtAk
给出的6670
长度。差值是 14。所以是误报。
而万一1.avatar.yahoo.com
相差200+。所以它有一些有趣的东西。因此,如果我传递了上述数据,我希望结果为http://1.avatar.yahoo.com
答案1
您没有给出接受的具体阈值,所以为什么不根据差异对它们进行排名
awk '{
if ($1 ~ /nonEtAk/) {ss=substr($1,1,length($1)-7); rank[ss]+=$2}
else rank[$1]-=$2
} END {
for (key in rank) { print key, "difference is", rank[key] }
}' <(sed -e '/^$/d' file) | sort -r -k4
输出
http://1.avatar.yahoo.com/ difference is 214
http://0-0.latam.corp.yahoo.com/ difference is 14
演练
删除所有空行并将其输入awk
awk '' <(sed -e '/^$/d' file)
在awk
如果第一个字段包含“nonEtAk”,则获取域名子字符串(通过删除最后 7 个字符)并将 $2 中的值添加到以域名为键的关联数组(排名)中
if ($1 ~ /nonEtAk/) {ss=substr($1,1,length($1)-7); rank[ss]+=$2}
...否则从以域名为键的数组元素中减去$2
else rank[$1]-=$2
...读完文件后
`} END {`
...迭代数组并打印
for (key in rank) { print key, "difference is", rank[key] }
...最后根据差异按降序排列
| sort -r -k4