所以我从昨晚开始就一直在玩这个,我可以得到很多事情发生,只是不是我想要的。
我需要一个代码来查找目录中行数最多的文件,然后打印该文件的名称和该文件的行数。
我可以打印整个目录的行,但似乎不能缩小字段的范围。
对一个愚蠢的学习者有什么帮助吗?
wc -l $1/* 2>/dev/null
| grep -v ' total$'
| sort -n -k1
| tail -1l在另一个问题中经过一些专业帮助后,这就是我得到的地方,但它返回所有它们,并且不打印它们的行数。
发布于 2013-06-12 23:31:13
下面的awk命令将为您做这项工作,您可以避免所有多余的管道命令:
wc -l $1/* | awk '$2 != "total"{if($1>max){max=$1;fn=$2}} END{print max, fn}'更新:为了避免wc输出的最后一行,这可能是更好的awk命令:
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}'发布于 2013-06-12 23:19:36
您可以尝试:
wc -l $1/* | grep -v total | sort -g | tail -1实际上,为了避免grep也会删除包含“total”的文件:
for f in $1/*; do wc -l $f; done | sort -g | tail -1或者更好,就像评论中建议的那样:
wc -l $1/* | sort -rg | sed -n '2p'你甚至可以把它变成一个函数:
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 totalEDIT2:使用我给出的函数,您可以简单地输出所需内容,如下所示:
get_biggest $1/* | awk '{print "The file \"" $2 "\" has the maximum number of lines: " $1}'编辑:如果您尝试按照问题中的方式编写函数,则应在末尾添加行连续字符,如下所示,否则您的shell会认为您正在尝试发出4个命令:
wc -l $1/* 2>/dev/null \
| grep -v ' total$' \
| sort -n -k1 \
| tail -1lhttps://stackoverflow.com/questions/17069131
复制相似问题