190
wc -l file.txt

输出行数和文件名。

我只需要数字本身(而不是文件名)。

我可以做这个

 wc -l file.txt | awk '{print $1}'

但也许有更好的方法?

4

10 回答 10

273

试试这个方法:

wc -l < file.txt
于 2012-04-20T02:52:03.847 回答
29
cat file.txt | wc -l

根据手册页(对于 BSD 版本,我没有要检查的 GNU 版本):

如果没有指定文件,则使用标准输入并且不显示文件名。提示将接受输入,直到收到 EOF,或在大多数环境中为 [^D]。

于 2012-04-19T23:41:02.563 回答
18

要在没有前导空格的情况下执行此操作,为什么不:

wc -l < file.txt | bc
于 2015-02-15T07:27:15.440 回答
12

怎么样

wc -l file.txt | cut -d' ' -f1

即管道输出wccut(其中分隔符是空格并只选择第一个字段)

于 2013-05-01T13:57:31.710 回答
12

技术比较

我有一个类似的问题,试图在没有 提供的前导空格的情况下获取字符数wc,这导致我访问了这个页面。在这里尝试了答案后,以下是我在 Mac (BSD Bash) 上进行的个人测试的结果。同样,这是为了字符数;对于你会做的行数wc -lecho -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适用于计算行数,但不适用于字符数。

bc是最简洁的,awk而且perl似乎有点矫枉过正,但它们都应该相对快速且足够便携。

另请注意,其中一些也可以调整为从一般字符串中修剪周围的空白(以及echo `echo $FOO`另一个巧妙的技巧)。

于 2018-11-06T17:57:21.110 回答
7

怎么样

grep -ch "^" file.txt
于 2014-10-20T05:22:20.807 回答
3

显然,有很多解决方案。这是另一个:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

这仅输出行数,但存在尾随换行符 ( \n),如果您也不想要,请替换[:blank:][:space:].

于 2016-01-25T15:54:58.813 回答
2

在不调用外部命令的情况下去除前导零的另一种方法是使用算术扩展 $((exp))

echo $(($(wc -l < file.txt)))
于 2021-11-17T13:22:18.083 回答
1

最好的方法是首先找到目录中的所有文件,然后使用 AWK NR(记录数变量)

下面是命令:

find <directory path>  -type f | awk  'END{print NR}'

例子 : - find /tmp/ -type f | awk 'END{print NR}'

于 2017-11-02T11:00:55.393 回答
0

这适用于我使用正常wc -lsed剥离任何不是数字的字符。

wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"

# 9249133
于 2019-09-04T07:44:12.707 回答