あなたが試すことができます:
wc -l $1/* | grep -v total | sort -g | tail -1
実際には、「total」を含むファイルも削除する grep を避けるために:
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}'
編集:質問で書いたように関数を書き込もうとした場合は、次のように行継続文字を最後に追加する必要があります。そうしないと、シェルは4つのコマンドを発行しようとしていると見なします:
wc -l $1/* 2>/dev/null \
| grep -v ' total$' \
| sort -n -k1 \
| tail -1l