Awk 获取具有非空字符的最后一行的行号

Awk 获取具有非空字符的最后一行的行号,awk,sed,wc,Awk,Sed,Wc,我有一个包含以下内容的文件: 10 tiny toes tree this is that tree 5 funny 0 文件末尾有空格。我想获取文件最后一行的行号(包含字符)。如何在SED中做到这一点?使用awk可以轻松做到这一点 awk 'NF{c=FNR}END{print c}' file 使用sed更为棘手。您可以使用=操作符,但这会将行号打印到标准输出,而不是在图案空间中。所以你不能操纵它。如果您想使用sed,您必须将它通过管道传输到另一个服务器,或者使用tail: sed

我有一个包含以下内容的文件:

10 tiny toes
tree
this is that tree
5 funny 0




文件末尾有空格。我想获取文件最后一行的行号(包含字符)。如何在SED中做到这一点?

使用
awk
可以轻松做到这一点

awk 'NF{c=FNR}END{print c}' file
使用
sed
更为棘手。您可以使用
=
操作符,但这会将行号打印到标准输出,而不是在图案空间中。所以你不能操纵它。如果您想使用sed,您必须将它通过管道传输到另一个服务器,或者使用
tail

sed -n '/^[[:blank:]]*$/!=' file | tail -1

使用
awk
可以轻松完成此操作

awk 'NF{c=FNR}END{print c}' file
使用
sed
更为棘手。您可以使用
=
操作符,但这会将行号打印到标准输出,而不是在图案空间中。所以你不能操纵它。如果您想使用sed,您必须将它通过管道传输到另一个服务器,或者使用
tail

sed -n '/^[[:blank:]]*$/!=' file | tail -1

您可以使用以下伪代码:

Replace all spaces by empty string
Remove all <beginning_of_line><end_of_line> (the lines, only containing spaces, will be removed like this)
Count the number of remaining lines in your file
用空字符串替换所有空格
全部删除(仅包含空格的行将按如下方式删除)
计算文件中剩余的行数

您可以使用以下伪代码:

Replace all spaces by empty string
Remove all <beginning_of_line><end_of_line> (the lines, only containing spaces, will be removed like this)
Count the number of remaining lines in your file
用空字符串替换所有空格
全部删除(仅包含空格的行将按如下方式删除)
计算文件中剩余的行数

在sed中很难计算行号。某些版本的sed提供了
=
操作符,但它不是标准的。您可以使用外部工具生成行号,并执行以下操作:

nl -s ' ' -n ln -ba input | sed -n 's/^\(......\)...*/\1/p' | sed -n '$p'

但是,如果要这样做,您最好使用awk。

在sed中很难计算行号。某些版本的sed提供了
=
操作符,但它不是标准的。您可以使用外部工具生成行号,并执行以下操作:

nl -s ' ' -n ln -ba input | sed -n 's/^\(......\)...*/\1/p' | sed -n '$p'
但是如果您要这样做,您最好使用awk。

这可能适合您(GNU-sed):

对于包含非空白字符的所有行,打印行号。通过管道将此输出传输到第二次调用sed,并仅打印最后一行

备选方案:

grep -n '\S' file | sed -n '$s/:.*//p'
这可能适用于您(GNU-sed):

对于包含非空白字符的所有行,打印行号。通过管道将此输出传输到第二次调用sed,并仅打印最后一行

备选方案:

grep -n '\S' file | sed -n '$s/:.*//p'