很简单,我在文件中有这样的文本:
#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
并输出其长度。