【问题标题】:Linux: sum of maximums of each row [closed]Linux:每行的最大值总和[关闭]
【发布时间】:2014-02-12 13:51:24
【问题描述】:

萨拉姆, 我需要一个 shell 脚本,它可以在 txt 文件中获取如下数据

8.0    5.2   6.6   4.0   1.6
7.1    8.0   2.3   7.2   2.8
4.0    3.0   2.0   5.0   2.1

并给出最大值之和作为输出,它表示每行的最大值之和,这是针对最大第一行 8、最大第二行 8 和最大最后一行 5 以上的矩阵,我希望得到结果 21就是(8+8+5),非常感谢

【问题讨论】:

  • 请注意,这是讽刺。在Stack Overflow 中,预计会付出一些努力,如果看到您尝试了某些东西,人们会提供帮助。如果你只是要求一些东西,看起来你不知道如何去做,只是想要结果。
  • 虽然许多人喜欢讽刺,但新用户可能更愿意接受更友善的建议。
  • @fatima,这里有一些实用的建议:阅读stackoverflow.com/help/asking
  • @superdesk 相信我,我通常很有帮助,只是我发现它非常“强制性”来自一个之前已经发布过一些问题的人。

标签: linux shell awk


【解决方案1】:

老实说,我更希望看到问题中描述的一些努力,但无论如何我需要awk 练习。

你可以用一个简单的循环来做到这一点;

awk '{max=$1;for(i=2;i<=NF;i++)if($i>max)max=$i;sum=sum+max;}END{print sum+0}'

它基本上只是遍历每行的所有列以获得最大值,并将其总结为sum

END 部分在文件完全处理后运行并仅打印总和。

【讨论】:

  • 您需要重置max 值。我得出了一些非常相似的东西:awk '{for (i=1;i&lt;=NF;i++) max=max&lt;$i?$i:max; res+=max; max=0} END{print res}' file
  • 实际上,我有两个代码,但它们不起作用:第一个是 awk '{for (i=1;i$i ?max[NR]:$i}END{for (i in max) sum+=max[i];print sum}' 文件
  • 第二个:#!/bin/bash let 'sum=0' while read ligne do let 'max=0' if [[ "$1" > "$max" ]];然后让 'max=$1' else if [[ "$2" > "$max" ]];然后让 'max=$2' else if [[ "$3" > "$max" ]];然后让 'max=$3' else if [[ "$4" > "$max" ]];然后让 'max=$4' fi fi fi fi 让 'sum = sum + $max' 完成
  • i&lt;NF 必须是 i&lt;=NF。您也可以使用sum+=max 代替sum=sum+max。 END 部分应该是print sum+0printf "%d",sum,即使是空文件也可以打印一个数字。不过,+1 是一种合理的方法。
  • 它不像以前的代码那样工作,我想我有问题但我不知道它是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2016-07-01
相关资源
最近更新 更多