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

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

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

#number
3222
#number
3311

我在用着:

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

它打印出:

7

4

7

4

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

4

4

答案1

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

awk '!/^#/ { print length }' file

!/^#/块之前是正则表达式匹配测试。如果模式^#匹配,则以下关联块是不是考虑(由于颠倒了匹配的意义!)。

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

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

awk '/^[[:digit:]]+$/ { print length }' file

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

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

awk '$0 == "#number" { getline; print length }' file

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

相关内容