wc -l file.txt

输出行数和文件名。

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

我可以这样做

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

但也许有更好的办法?


当前回答

如何

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

例如,将wc的输出输送到cut(分隔符是空格,只选择第一个字段)

其他回答

技术比较

在没有wc提供的前导空格的情况下,我尝试获得字符数时遇到了类似的问题,这将我引导到这个页面。在尝试了这里的答案之后,以下是我在Mac (BSD Bash)上进行的个人测试的结果。同样,这是为了字符计数;行数可以用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用于计算行数,而不是字符数。

BC是最简洁的,awk和perl似乎有点过分,但它们都应该相对较快,并且足够可移植。

还需要注意的是,其中一些也可以用于从一般字符串中修剪周围的空白(以及echo ' echo $FOO ',另一个巧妙的技巧)。

如果不使用前导空格,为什么不这样做呢:

wc -l < file.txt | bc

如何

grep -ch "^" file.txt

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

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

# 9249133

显然,这个问题有很多解决方案。 下面是另一个例子:

wc - l somefile | tr - d”[:α][空白:][punct:]”

这只输出行数,但是后面的换行符(\n)是存在的,如果你也不想要,用[:space:]替换[:blank:]。