使用第二列比较两行

使用第二列比较两行
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

相关内容