如何让“wc -l”只打印没有文件名的行数?

时间:2012-04-19 23:37:30

标签: shell wc

wc -l file.txt

输出行数和文件名。

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

我可以这样做

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

但也许有更好的方法?

9 个答案:

答案 0 :(得分:166)

尝试这种方式:

wc -l < file.txt

答案 1 :(得分:19)

cat file.txt | wc -l

根据the man page(对于BSD版本,我没有要检查的GNU版本):

  

如果未指定文件,则使用标准输入而不使用文件   名字是        显示。提示将接受输入,直到收到EOF或[^ D]        大多数环境。

答案 2 :(得分:12)

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

wc -l < file.txt | bc

答案 3 :(得分:11)

怎么样

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

即。将wc的输出传递给cut(其中分隔符是空格,只选择第一个字段)

答案 4 :(得分:4)

怎么样

grep -ch "^" file.txt

答案 5 :(得分:3)

技术比较

我遇到类似的问题,试图在没有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是最简洁的,awkperl似乎有点过大,但它们都应该相对较快且可移植。

还请注意,其中一些方法也可以用于从通用字符串中修剪周围的空白(以及echo `echo $FOO`,这是另一个巧妙的技巧)。

答案 6 :(得分:2)

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

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

这只会输出行数,但会显示尾随换行符(\n),如果您不想要,请将[:blank:]替换为[:space:]

答案 7 :(得分:1)

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

下面是命令:

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

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

答案 8 :(得分:0)

这对我有用,它使用普通的wc -lsed去除任何不是数字的字符。

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

# 9249133