【问题标题】:Filtering by author and counting all numbers im txt file - Linux terminal, bash按作者过滤并计算文本文件中的所有数字 - Linux 终端,bash
【发布时间】:2020-09-09 20:02:11
【问题描述】:

我需要两个方面的帮助

1)file.txt 具有电影列表的格式 ,其中他们是不同行的作者,出版年份,标题,例如

author1
year1
title1
author2
year2
title2
author3
year3
title3
author4
year4
title4

我只需要显示作者为“乔安妮·罗琳”的书名

2) one.txt 包含数字和字母,例如:

dada4dawdaw54 232dawdawdaw 53 34dadasd
77dkwkdw
65 23 laka 23

我需要将所有这些相加并获得分数 - 这里应该是 561

我尝试过类似的方法:

awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' plik2.txt

但这没有意义

【问题讨论】:

  • 对于#1 可能是grep -A 3 "Joanne Rowling" 。如果您只想获得标题,awk 是您的朋友,记录号为模 3(无论如何,awk 您的朋友)。
  • 对于#2,| tr -d "[a-z]" 也应该对您有所帮助(我现在无法测试任何东西)。
  • 您需要展示您对 (1) 的尝试。您需要保持一致,one.txtplik2.txt 是您在 (2) 中的文件名。还需要说明but it doesn't make sense,既不是错误信息,也不是程序的输出。

标签: linux bash terminal


【解决方案1】:

对于第一个问题,您只需要使用grep。具体来说,你可以做grep -A 2 "Joanne Rowling" file.txt。这将显示所有带有“Joanne Rowling”的行以及紧随其后的两行。

对于第二个问题,你也可以通过grep -Eo '[0-9]+' | paste -sd+ | bc来使用grep。这将在grep 找到的每个数字之间添加一个+,然后使用bc 将它们相加。

【讨论】:

    【解决方案2】:

    对于第一个问题,okulkarni 的解决方案很棒。

    对于第二个问题,一个解决方案是

    sed 's/[^0-9]/ /g' one.txt | awk '{for(i=1;i<=NF;i++) sum+= $i} END { print sum}'
    

    sed 命令将所有非数字字符转换为空格,而awk 命令逐行求和。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 2014-04-26
      相关资源
      最近更新 更多