jhe*_*ran 43
你应该使用这样的命令:
find /group/book/four/word/ -type f -exec wc -l {} + | sort -rn
Run Code Online (Sandbox Code Playgroud)
find: 在您想要的路径上搜索文件。如果您不希望它递归,并且您的find实现支持它,则应该-maxdepth 1在-exec选项之前添加。exec: 告诉命令wc -l在每个文件上执行。sort -rn: 以相反的顺序对结果进行数字排序。从大到小。(假设文件名不包含换行符)。
Ski*_*rou 15
如果您不需要递归,可能是最简单的版本:
wc -l /group/book/four/word/*|sort -n
Run Code Online (Sandbox Code Playgroud)
wc计算 下-l每个(但隐藏)( *) 文件中的行数(选项)/group/book/four/word/,并按数字sort对结果(通过管道|)进行排序(选项-n)。
有人对这个答案发表了评论,提到grep -rlc, 之前要压制它。Indeedgrep是一个不错的选择,尤其是当您需要递归时:
grep -rc '^' /group/book/four/word/|tr ':' ' '|sort -n -k2
Run Code Online (Sandbox Code Playgroud)
将-c递归地计算(选项)-r匹配(grep)'^'(即行的开头)目录中的(选项)行/group/book/four/word/。然后,您必须用空格替换冒号,例如使用tr, 来帮助sort,您希望-n在第二列(选项-k2)上按数字排序(选项)。
更新:请参阅 Stephane 关于可能的限制以及如何真正摆脱tr.
与zsh:
lines() REPLY=$(wc -l < $REPLY)
print -rC1 /group/book/four/word/*(.no+lines)
Run Code Online (Sandbox Code Playgroud)
我们定义了一个新的排序函数lines,它以文件中的行数进行回复。我们使用o+linesglob 限定符,它与n(用于数字排序)一起定义了 glob 的结果如何排序。(.也添加到仅检查常规文件)。
除了隐藏文件(以 开头的文件.)被省略之外,这不假设文件名可能包含哪些字符。D如果你想要它们,也可以添加glob 限定符。
lines当你经常做这样的事情时,定义一个函数很有用,但对于一次性的,你也可以一次性完成:
print -rC1 /group/book/four/word/*(.noe['REPLY=$(wc -l < $REPLY)'])
Run Code Online (Sandbox Code Playgroud)
在另一个 shell 中,只需运行:
zsh -c '
print -rC1 /group/book/four/word/*(.noe['\''REPLY=$(wc -l < $REPLY)'\''])'
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实必须使用这些 shell,则将其存储在ksh93/bash数组中:
typeset -a array
eval "
array=(
$(
zsh -c '
() {
print -r -- "${(qq)@}"
} /group/book/four/word/*(N.noe['\''REPLY=$(wc -l < $REPLY)'\''])'
)
)
"
Run Code Online (Sandbox Code Playgroud)
(此处使用正确的单引号引用(带有qq参数扩展标志)eval以确保安全)。