首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >文件中多个参数的计数器

文件中多个参数的计数器
EN

Stack Overflow用户
提问于 2019-03-28 00:42:25
回答 3查看 60关注 0票数 -1
代码语言:javascript
复制
awk '{print $1}' ios-example.com.access | sort | uniq -c | sort -nr

https://pajda.fit.vutbr.cz/ios/ios-19-1-logs/blob/master/ios-example.com.access.log -这是ios-example.com.access

我做了一些东西,它工作了,但并不完全像我想要的那样。有没有人可以帮我升级我的命令?

现在的输出如下所示:

代码语言:javascript
复制
8 192.27.69.191
2 82.202.69.253

输出必须如下所示:

代码语言:javascript
复制
198.27.69.191 (8): ########
82.202.69.253 (2): ##

我甚至需要它的标签

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-28 02:12:20

代码语言:javascript
复制
cat ios-example.com.access | sort | uniq -c | awk 'ht="#"{for(i=1;i<$1;i++){ht=ht"#"} str=sprintf("%s (%d): %s", $2,$1, ht); print str}'

需要包含如下内容的文件:

代码语言:javascript
复制
ipadress1
ipadress1
ipadress1
ipadress2
ipadress2
ipadress1
ipadress2
ipadress1
票数 0
EN

Stack Overflow用户

发布于 2019-03-28 01:26:06

您可以通过向列表中添加另一个awk来升级您的命令,或者您可以只使用一个awk来完成所有操作:

代码语言:javascript
复制
awk '{a[$1]++}
     END { for(i in a) { 
             printf "%s (%d):" ,i,a[i]
             for(j=0;j<a[i];++j) printf "#"; printf "\n"
           }
     }' file
票数 0
EN

Stack Overflow用户

发布于 2019-03-28 01:57:09

xargsshprintf一起使用。字里行间的注释。tutorialspoint上的实况版本。

代码语言:javascript
复制
# sorry cat
cat <<EOF |
8 192.27.69.191
2 82.202.69.253
EOF
# for each 2 arguments
xargs -n2 sh -c '
    # format the output as "$2 ($1): "
    printf "%s (%s): " "$2" "$1"
    # repeat the character `#` $1 times
    seq "$1" | xargs printf "#%.0s"
    # lastly a newline
    printf "\n"
' --

我认为我们可以通过以下方式缩短这段时间:

代码语言:javascript
复制
xargs -n2 sh -c 'printf "%s (%s): %s\n" "$2" "$1" $(printf "#%.0s" $(seq $1))' --

或者,如果输入足够安全,也可以只使用echo:

代码语言:javascript
复制
xargs -n2 sh -c 'echo "$2 ($1): $(printf "#%.0s" $(seq $1))"' --
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55382420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档