在bash中使用cut命令

在bash中使用cut命令,bash,cut,wc,awk,Bash,Cut,Wc,Awk,我只想获取文件中的行数: 因此,我: 我不想要文件名,所以我尝试了 $wc -l countlines.py | cut -d ' ' -f1 但这只是空话 我只想把数字9打印出来被前面的空格弄糊涂了 我会在这里打印1st字段: % wc -l countlines.py | awk '{ print $1 }' 正被前导空格所迷惑 我会在这里打印1st字段: % wc -l countlines.py | awk '{ print $1 }' 像这样使用awk: wc -l countl

我只想获取文件中的行数: 因此,我:

我不想要文件名,所以我尝试了

$wc -l countlines.py | cut -d ' ' -f1
但这只是空话

我只想把数字
9
打印出来

被前面的空格弄糊涂了

我会在这里打印
1
st字段:

% wc -l countlines.py | awk '{ print $1 }'
正被前导空格所迷惑

我会在这里打印
1
st字段:

% wc -l countlines.py | awk '{ print $1 }'
像这样使用awk:

wc -l countlines.py | awk {'print $1'}
像这样使用awk:

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

将文件名管道化到
wc
将其从输出中删除,然后
tr
anslate删除空白:

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

wc-l将文件名管道化到
wc
将其从输出中删除,然后
tr
删除空白:

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

wc-l使用stdin,您就不会有打印文件名的问题了

wc -l < countlines.py
wc-l
使用stdin,您就不会有打印文件名的问题了

wc -l < countlines.py
wc-l
另一种选择是,如果文件名是通过管道从stdin输入的,wc不会打印文件名

$ cat countlines.py | wc -l
9

另一种选择是,如果文件名是通过管道从stdin输入的,wc将不会打印该文件名

$ cat countlines.py | wc -l
9
还有另一种方式:

cnt=$(wc -l < countlines.py )
echo "total is $cnt "
cnt=$(wc-l
还有另一种方法:

cnt=$(wc -l < countlines.py )
echo "total is $cnt "
cnt=$(wc-l
您也可以使用
awk
来计算行数。()

  • 其中countlines.py是要计数的文件

您也可以使用
awk
来计算行数。()

  • 其中countlines.py是要计数的文件

如果文件没有以
\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

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

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

grep -c '.' file
不要信任wc
:)

注:
wc
最奇怪的用法之一是

grep 'pattern' file | wc -l
而不是

grep -c 'pattern' file

如果文件没有以
\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

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

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

grep -c '.' file
不要信任wc
:)

注:
wc
最奇怪的用法之一是

grep 'pattern' file | wc -l
而不是

grep -c 'pattern' file


@UliKöhler:我检查了你发布的重复链接,它是
wc-l countlines.py | cut-f1-d'
,但它不起作用。的确,第一个答案不能解决你的问题,但我相信第二个答案的修改版本(得分最高)可以解决问题。请参阅下面我的帖子。注意:另一篇帖子的第一个答案似乎在任何时候行数/字数>999@UliK谢谢你的建议。我的文件很小(只有12行)。但它仍然不起作用。另一方面,在这里发布的解决方案是有效的。所以我会这么说。@UliKöhler:我检查了你发布的重复链接,它是
wc-l countlines.py | cut-f1-d'
,但它不起作用。的确,第一个答案不能解决你的问题,但我相信第二个答案的修改版本(得分最高)能解决问题。请参阅下面我的帖子。注意:另一篇帖子的第一个答案似乎在任何时候行数/字数>999@UliK谢谢你的建议。我的文件很小(只有12行)。但它仍然不起作用。另一方面,在这里发布的解决方案是有效的。所以我要用这个。所有的管道都是多余的。通过像
wc-l
这样从标准输入进行计数,该实用程序将只打印数字,而不打印其他内容。没有空格和文件名,也不需要
tr
。这取决于实现,Gnu
wc
会省略空格,BSD
wc
不会。所有管道都是不必要的。通过像
wc-l
这样从标准输入进行计数,该实用程序将只打印数字,而不打印其他内容。没有空格和文件名,也不需要
tr
。这取决于实现,Gnu
wc
会省略空格,BSD
wc
不会。这里不需要使用
cat
。一个简单的
wc-l
就可以了。虽然您的答案比使用
tr
awk
cut
要好。但此处不必使用
cat
。一个简单的
wc-l
就可以了。虽然你的答案比使用
tr
awk
cut
要好。我认为这是一个很好的解决方案,但每次
wc
呼叫只对单个文件有效。@UliKöhler-我完全同意你的观点,但这是对单个文件相关问题的直接回答。只检索多个文件的大小而不知道哪个大小对应于哪个文件是没有意义的。如果我运行
wc-l*|awk'{print$1}'
谁来说哪个文件对应哪个大小?还有一个额外的尺寸输出,总尺寸。我同意。然而,我能想到的一个有效用例(OP没有要求,但其他用户可能会发现这个问题)是列出多个文件,而不是
*
。然后您知道awk解决方案将以与输入文件相同的顺序打印这些行。对于多个文件来说,总大小确实是一个问题。这对于BSD
wc
是无效的,如果你将内容导入其中,它还会在结果前面加上空格。我认为这是一个很好的解决方案,但每次调用
wc
只对一个文件有效。@UliKöhler-我完全同意