【问题标题】:AWK - I need to write a one line shell command that will count all lines thatAWK - 我需要编写一个单行 shell 命令来计算所有行
【发布时间】: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 linesawk regex 或其他什么,您就应该到达那里。您不太可能在这里得到家庭作业问题的直接答案。
  • @RobertPlant 您应该检查行首字符,然后检查其后跟(,然后是1+十进制字符,即\d+[0-9]+或一些这样的结构,然后是结束)。之后指示不是很清楚,如果可以的话我会让你的老师确认。如果不是,我会假设该句子可以包含常规部分,如大写/小写字母、,.(因为它包含在示例中)、;:'、空格等...并在您的解决方案中解释您包含/排除的内容。然后确保它被.$ 终止
  • @RobertPlant 如果我逐字阅读说明,我会假设它应该只是^\([0-9]+\)(UPPER|LOWER)*\.$(这不是真正的正则表达式,但非常接近您想要的),甚至可能需要它至少有一个上层和一个下层。但是方向也不是很清楚,所以如果你不能问,我会根据例子做出最好的猜测,并附上对该猜测的解释和解决方案。

标签: bash shell awk


【解决方案1】:

这不是家庭作业解决方案服务。不过我觉得可以指点一下。

一个想法是创建一个计数器,然后在最后打印结果:

awk '<COND> {c++} END {print c}'

我对术语有点困惑。首先,您声称应该计算行数,但在示例中,它说应该打印这些行。

现在你当然可以这样做:

awk '<COND>' file.txt | wc -l

第一部分将打印出符合条件的所有行,但输出将被解析为wc -l,这是一个计算行数的单独程序。

现在&lt;COND&gt;应该是什么条件,我留给你。我强烈建议你谷歌正则表达式和awk,应该不会太难。

【讨论】:

  • chw21,我不使用 StackOverflow 作为家庭作业服务,但我也对这个问题中的一些确切措辞感到困惑,因为它只有 1 行,我真的认为我应该转专门针对这个问题在互联网上的头脑中。我不知道如何分解它比这更简单。感谢您的回复!
  • 但是,问题是逐字复制的。我没有用自己的话来表达这个问题。你在这里看到的就是我得到的。
【解决方案2】:

我觉得要求很明确

编写一个单行 shell 命令,该命令将计算名为“file.txt”的文件中的所有行,这些行以括号中的十进制数字开头,包含大小写字母的混合,并以句点结尾。

1. begin with a decimal number in parenthesis
2. containing a mix of both upper and lower case letters
3. end with a period

检查所有三个条件。请注意,在 2. 中,它并没有说“仅”,因此您可以拥有额外的字符类别,但它应该至少有一个大写和一个小写字符。

该示例混合了打印和计数的概念,如果练习的一部分措辞非常糟糕,或者可能假设计数将由过滤脚本的管道输出由wc 完成;无论如何应该给予更多的关注,尤其是对于学生练习。

如果有什么不清楚的地方请评论,我会补充更多细节...

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2021-04-04
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多