【发布时间】:2023-03-31 12:25:01
【问题描述】:
我需要将此解决方案编写为 AWK 命令。我被困在最后一个问题上:
编写一个单行 shell 命令,该命令将计算名为“file.txt”的文件中的所有行,这些行以括号中的十进制数字开头,包含大小写字母的混合,并以 a 结尾期间。
示例:
这是我们要打印的行的格式。应跳过与此格式不匹配的行:
(10) 这是 file.txt 中的示例行,您的脚本应该 数。
(117) 这是你的脚本应该计算的另一行。
应该跳过这样的行以及其他不匹配的行:
15 此行不应打印
而且这一行不应该被打印出来
提前致谢,我不确定如何一次性解决这个问题。
【问题讨论】:
-
问题陈述不明确。该行必须只包含大写和小写字符吗?如果是这样,那么给定匹配的样本都不应该匹配,因为它们也包含空格。括号中的数字后面必须有什么吗?除了大写和小写字母(显然是空格)之外,右括号后是否还有其他字符?括号内可以有字母字符吗?决定,指定你所做的决定,写一个匹配的正则表达式,然后完成。
-
可以通过
grep -oP 'some perl regex' file.txt | wc -l轻松完成 -
但实际上只需 google
awk count lines、awk regex或其他什么,您就应该到达那里。您不太可能在这里得到家庭作业问题的直接答案。 -
@RobertPlant 您应该检查行首字符,然后检查其后跟
(,然后是1+十进制字符,即\d+或[0-9]+或一些这样的结构,然后是结束)。之后指示不是很清楚,如果可以的话我会让你的老师确认。如果不是,我会假设该句子可以包含常规部分,如大写/小写字母、,、.(因为它包含在示例中)、;、:、'、空格等...并在您的解决方案中解释您包含/排除的内容。然后确保它被.$终止 -
@RobertPlant 如果我逐字阅读说明,我会假设它应该只是
^\([0-9]+\)(UPPER|LOWER)*\.$(这不是真正的正则表达式,但非常接近您想要的),甚至可能需要它至少有一个上层和一个下层。但是方向也不是很清楚,所以如果你不能问,我会根据例子做出最好的猜测,并附上对该猜测的解释和解决方案。