使用 grep 或 awk,如何计算每行中的字符数,同时又根据第一个字符忽略某些行?

Fai*_*ein 0 linux grep awk

很简单,我在文件中有这样的文本:

#number
3222
#number
3311
Run Code Online (Sandbox Code Playgroud)

我在用着:

awk '{打印长度}' file.txt

它打印出:

7

4

7

4

但我只是希望它打印数字的长度并忽略以“#”开头的行,以打印:

4

4

Kus*_*nda 6

告诉awk只打印第一个字符不是 a 的行的长度#

awk '!/^#/ { print length }' file
Run Code Online (Sandbox Code Playgroud)

块之前!/^#/是正则表达式匹配测试。如果模式匹配,则不^#考虑后面的关联块(因为反转了与 的匹配含义)。!

该模式^#尝试匹配#当前行开头的 a。

或者,如果您想输出仅包含数字的行的长度:

awk '/^[[:digit:]]+$/ { print length }' file
Run Code Online (Sandbox Code Playgroud)

由于在开头和结尾处都有锚定,该模式^[[:digit:]]+$仅匹配由单个连续数字组成的行。您还可以用来避免包含任何非数字字符的行。^$!/[^[:digit:]]/

或者,仅输出恰好位于以下行之后的行的长度#number

awk '$0 == "#number" { getline; print length }' file
Run Code Online (Sandbox Code Playgroud)

在这里,我们与当前行进行字符串比较,如果完全一致 #number(如问题中的示例数据所示),我们读取下一行getline并输出其长度。