在bash中使用cut命令

时间:2014-01-14 23:48:51

标签: bash cut wc

我想只获取文件中的行数: 所以我这样做:

$wc -l countlines.py 
   9 countlines.py

我不想要文件名,所以我试过

$wc -l countlines.py | cut -d ' ' -f1

但这只是回显空行。

我只想要打印数字9

8 个答案:

答案 0 :(得分:8)

使用stdin,您将不会遇到wc打印文件名

的问题
wc -l < countlines.py

答案 1 :(得分:3)

您还可以使用awk来计算行数。 (reference

awk 'END { print NR }' countlines.py
  • 其中 countlines.py 是您要计算的文件

答案 2 :(得分:3)

如果您的文件未以\n(新行)结尾,则wc -l会给出错误的结果。尝试使用下一个模拟示例:

echo "line1"    >  testfile #correct line with a \n at the end
echo -n "line2" >> testfile #added another line - but without the \n

$ wc -l < testfile
       1

返回 1 。 (wc计算文件中的换行符数(\n)。)

因此,对于文件中的行(而不是\n字符),你应该使用

grep -c '' testfile

e.g。在文件中找到空字符(每行都是如此)并计算出现的-c。对于上述testfile,它会返回正确的 2

此外,如果您想要计算非空行,您可以使用

进行计数
grep -c '.' file

不要相信wc:)

Ps:wc最奇怪的用途之一是

grep 'pattern' file | wc -l

而不是

grep -c 'pattern' file

答案 3 :(得分:2)

被领先的空白混淆了。

我在这里使用打印1字段:

% wc -l countlines.py | awk '{ print $1 }'

答案 4 :(得分:2)

将文件名管道导入wc会将其从输出中删除,然后tr将空白区域移除:

wc -l <countlines.py |tr -d ' '

答案 5 :(得分:2)

作为替代方案,如果文件名是从stdin

输入的,则wc不会打印文件名
$ cat countlines.py | wc -l
9

答案 6 :(得分:2)

另一种方式:

cnt=$(wc -l < countlines.py )
echo "total is $cnt "

答案 7 :(得分:1)

像这样使用awk:

wc -l countlines.py | awk {'print $1'}