【发布时间】:2016-06-16 02:24:05
【问题描述】:
该程序应该计算以括号中的十进制数字开头的行数,包含大小写字母的混合,并以句点结尾。
我有
BEGIN {x=0}
/^\([0-9[0-9]*) [A-Z][A-z]* [a-z][a-z]* \.$/ {x = x+1}
END{print x}
我将它们拆分为多个不同的行,因为我一直在运行 display(!d) 语句以进行调试以试图弄清楚。
运行我使用awk -f programName.awk filename.txt
任何帮助表示赞赏。
更新
新代码读取
BEGIN{x=0}
/^\([0-9]+\)[A-Za-z]+\.$/{x++}
END{print x}
我使用 vim EC.awk 来编辑它。 awk -f EC.awk EC.txt 运行 回来了 1。 EC.txt 包含应计算的 12 行中的 5 行。
输入文件 vim EC.txt
(1) Line one, this should count.
(2)Line two. Should also count.
3 should not count..
4 not
(5)Yes.
(6). nope
7 OHHH mann
8 This suck
(9)Oh ya? YOU SUCK.
10 Cheaa
(11) BOI.
(12) WoW MoM. Print mofo.
更新代码
BEGIN{x=0}
/^\([0-9]+\).*?[A-Za-z]+\.$/{x++}
END{print x}
这给了我 6。我相信它的计数线 11 (11) BOI。正在打印这些行以确保。
【问题讨论】:
-
不确定您的正则表达式是否正确。
^\([0-9]\)[A-Za-z]*\.$是一行以括号中的单个数字开头,后跟 u/l 大小写字母并以句点结尾的行 ?多位数字改为^\([0-9]+\)[A-Za-z]*\.$。 -
我改变了你的建议,但仍然得到我想要的相同结果,如果我把 {x=x+1} 放在下一行它会打印/计数 12 这是行数我的测试文件,但应该只计算 5 行。如果我在行尾有 {x=x+1} 它打印/计数 1。
-
您可以发布您的
EC.txt文件吗?因为那时我可以根据输入文件更改正则表达式 -
给定该输入的预期输出是什么?您希望匹配哪些行?