首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在尝试使用行数打印最大行数的文件

正在尝试使用行数打印最大行数的文件
EN

Stack Overflow用户
提问于 2013-06-12 23:15:56
回答 2查看 737关注 0票数 1

所以我从昨晚开始就一直在玩这个,我可以得到很多事情发生,只是不是我想要的。

我需要一个代码来查找目录中行数最多的文件,然后打印该文件的名称和该文件的行数。

我可以打印整个目录的行,但似乎不能缩小字段的范围。

对一个愚蠢的学习者有什么帮助吗?

代码语言:javascript
复制
wc -l $1/* 2>/dev/null
   | grep -v ' total$'
   | sort -n -k1
   | tail -1l

在另一个问题中经过一些专业帮助后,这就是我得到的地方,但它返回所有它们,并且不打印它们的行数。

EN

回答 2

Stack Overflow用户

发布于 2013-06-12 23:31:13

下面的awk命令将为您做这项工作,您可以避免所有多余的管道命令:

代码语言:javascript
复制
wc -l $1/* | awk '$2 != "total"{if($1>max){max=$1;fn=$2}} END{print max, fn}'

更新:为了避免wc输出的最后一行,这可能是更好的awk命令:

代码语言:javascript
复制
wc -l $1/* | awk '{arr[cnt++]=$0} END {for (i=0; i<length(arr)-1; i++) 
                  {split(arr[i], a, " "); if(a[1]>max) {max=a[1]; fn=a[2]}} print max, fn}'
票数 1
EN

Stack Overflow用户

发布于 2013-06-12 23:19:36

您可以尝试:

代码语言:javascript
复制
wc -l $1/* | grep -v total | sort -g | tail -1

实际上,为了避免grep也会删除包含“total”的文件:

代码语言:javascript
复制
for f in $1/*; do wc -l $f; done | sort -g | tail -1

或者更好,就像评论中建议的那样:

代码语言:javascript
复制
wc -l $1/* | sort -rg | sed -n '2p'

你甚至可以把它变成一个函数:

代码语言:javascript
复制
function get_biggest_file() {
    wc -l $* | sort -rg | sed -n '2p'
}

% ls -l
...  0 Jun 12 17:33 a
...  0 Jun 12 17:33 b
...  0 Jun 12 17:33 c
...  0 Jun 12 17:33 d
... 25 Jun 12 17:33 total
% get_biggest_file ./*
5 total

EDIT2:使用我给出的函数,您可以简单地输出所需内容,如下所示:

代码语言:javascript
复制
get_biggest $1/* | awk '{print "The file \"" $2 "\" has the maximum number of lines: " $1}'

编辑:如果您尝试按照问题中的方式编写函数,则应在末尾添加行连续字符,如下所示,否则您的shell会认为您正在尝试发出4个命令:

代码语言:javascript
复制
wc -l $1/* 2>/dev/null \
   | grep -v ' total$' \
   | sort -n -k1 \
   | tail -1l
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17069131

复制
相关文章

相似问题

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