wc -l file.txt
输出行数和文件名。
我只需要数字本身(而不是文件名)。
我可以的
wc -l file.txt | awk '{print $1}'
但也许有更好的办法?
cat file.txt | wc -l
根据手册页(对于BSD版本,我没有GNU版本来检查):
如果不指定文件,则使用标准输入,不指定文件 的名字是 显示出来。提示符将接受输入,直到接收到EOF或[^D] in 大多数环境。< / p >
试试这个方法:
wc -l < file.txt
如何
wc -l file.txt | cut -d' ' -f1
例如,将wc的输出输送到cut(其中分隔符是空格,只选择第一个字段)
wc
cut
grep -ch "^" file.txt
如果不使用前导空格,为什么不这样做呢:
wc -l < file.txt | bc
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
这只输出行数,但是后面的换行符(\n)是存在的,如果你也不想要它,用[:space:]替换[:blank:]。
\n
[:space:]
[:blank:]
最好的方法是首先找到目录中的所有文件,然后使用AWK NR(记录数量变量)
命令如下:
find <directory path> -type f | awk 'END{print NR}'
示例:—find /tmp/ -type f | awk 'END{print NR}'
find /tmp/ -type f | awk 'END{print NR}'
我有一个类似的问题,试图获得一个字符计数没有wc提供的前导空格,这导致我到这个页面。在尝试了这里的答案之后,以下是我在Mac (BSD Bash)上进行的个人测试的结果。同样,这是为了字符计数;对于行数,你可以使用wc -l。echo -n省略了后面的换行符。
wc -l
echo -n
FOO="bar" echo -n "$FOO" | wc -c # " 3" (x) echo -n "$FOO" | wc -c | bc # "3" (√) echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√) echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√) echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x) echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√) echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√) echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x) echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
我一般不会依赖cut -f*方法,因为它要求你知道任何给定输出可能具有的前导空格的确切数量。grep用于计算行数,而不是字符数。
cut -f*
grep
bc是最简洁的,而awk和perl似乎有点大材小用,但它们应该都是相对快速和足够可移植的。
bc
awk
perl
还要注意的是,其中一些也可以用于从一般字符串中修剪周围的空白(还有echo `echo $FOO`,另一个巧妙的技巧)。
echo `echo $FOO`
这适用于我使用正常的wc -l和sed来剥离任何不是数字的字符。
sed
wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g" # 9249133
另一种不调用外部命令而去掉前导零的方法是使用算术扩张 $((exp))
$((exp))
echo $(($(wc -l < file.txt)))