Answers:
每个文件中有几行。
使用wc
,最初是为字数,我相信,但它可以做的线条,字,字符,字节,最长的线路长度。该-l
选项告诉它计数行。
wc -l <filename>
这将输出行数:
$ wc -l /dir/file.txt
32724 /dir/file.txt
您还可以通过管道将数据发送到wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
目录中有几行。
尝试:
find . -name '*.pl' | xargs wc -l
另一个单线:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
顺便说一句,wc
命令计算新行代码,而不是行数。当文件中的最后一行不以新行代码结尾时,将不计入该行。
您可以使用grep -c ^,完整示例:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
总共多少行
不确定我是否理解您的要求正确。例如,这将以以下格式输出结果,显示每个文件的行数:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
或者,仅将换行符的总数而不按文件计数输出到以下命令可能会很有用:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
最重要的是,例如,我需要使用“人类可读格式”。12,345,678而不是12345678
Bash具有内置的printf函数:
printf "%0.2f\n" $T
与往常一样,可以使用许多不同的方法来获得此处提到的相同结果。
printf
不读取从它的参数stdin
,而是通过命令行(比较管道到echo
VS管道到cat
; cat
从读取stdin
,echo
没有)。而是使用printf "$(find ... | xargs ...)"
将输出作为参数提供给printf
。
在许多情况下,将wc
命令和通配符组合在一起*
可能就足够了。
如果所有文件都在一个目录中,则可以调用:
wc -l src/*
您还可以列出几个文件和目录:
wc -l file.txt readme src/* include/*
此命令将显示文件列表及其行数。
最后一行将是所有文件中各行的总和。
要递归计算目录中的所有文件:
首先,通过添加shopt -s globstar
到.bash_profile来启用globstar 。对globstar的支持要求Bash≥4.x,可以在需要时安装brew install bash
。您可以使用检查版本bash --version
。
然后运行:
wc -l **/*
请注意,如果未启用globstar,则此输出将不正确。
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
”