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

PoG*_*bas 127 shell wc

wc -l file.txt
Run Code Online (Sandbox Code Playgroud)

输出行数和文件名.

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

我可以做这个

 wc -l file.txt | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

但也许有更好的方法?

Nor*_*sey 190

试试这种方式:

wc -l < file.txt
Run Code Online (Sandbox Code Playgroud)

  • 在AIX中,ksh,这个数字前面总是有一个空格.我们必须使用| awk'{print $ 1}'或剪裁,以修剪空间.修剪的另一种方法是用回声封闭. (3认同)

pjm*_*rse 21

cat file.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

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

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

  • @ user1286528然后使用`wc -l <​​file.txt`来避免使用cat.如果你认为这会消耗任何明显的时间,你绝对是疯了. (11认同)
  • `wc -l <​​file.txt`具有相同的效果. (9认同)
  • 我不喜欢猫 - 连接消耗很多时间. (3认同)
  • @用户:测试一下。到目前为止,最慢的部分是从磁盘读取文件。 (2认同)

Des*_*ane 12

要做到这一点没有领先的空间,为什么不:

wc -l < file.txt | bc
Run Code Online (Sandbox Code Playgroud)

  • 我也得到一个解析错误,但是您可以将其与另一个答案结合使用`wc -l <​​file.txt`来修复解析错误并删除空格:`wc -l <​​file.txt | bc` (2认同)

小智 11

怎么样

wc -l file.txt | cut -d' ' -f1
Run Code Online (Sandbox Code Playgroud)

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

  • 这并不比`wc -l file.txt |更好 awk'{print $ 1}'`OP尝试过. (4认同)
  • 这不适用于 Mac(基于 BSD)。前导空格的数量取决于填充,因此字段值将取决于结果。上述解决方案之一会好得多。 (2认同)

小智 5

怎么样

grep -ch "^" file.txt
Run Code Online (Sandbox Code Playgroud)

  • 好的。`grep` 的非常原始/创造性的使用,但检查后发现(不出所料)在我的测试中比更简单/直接的 `wc` 方法慢 2 到 6 倍。 (4认同)

Bee*_*jor 5

技术比较

我也遇到类似的问题,试图在没有提供的领先空白的情况下获取字符数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"           (?)
Run Code Online (Sandbox Code Playgroud)

cut -f*一般不会依赖该方法,因为它要求您知道任何给定输出可能具有的前导空格的确切数量。和grep一个适用于计数行,而不是文字。

bc是最简洁的,并且awkperl显得有些矫枉过正,但他们都应该是比较快和便携不够。

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

  • `echo $(printf '%s' "$FOO" | wc -c)` 是 [`echo` 带有命令替换](http://www.iki.fi/era/unix/ Award.html#echo) 并非毫无用处。 (2认同)