你可以试试:
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 total
EDIT2:使用我提供的功能,您可以简单地输出您需要的内容,如下所示:
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 -1l