找到给定数据中最大的正数?

找到给定数据中最大的正数?

有人可以告诉我一种使用 awk、sed 或某种 unix shell 程序找到最大正数的方法吗?我正在使用 Linux RHEL 和 KSH。输入可能有 8 列数据,其中 N/A 作为可能值之一。

SAMPLE INPUT

1252.2          1251.8          N/A             N/A 
-31.9           -33.2           N/A             N/A 
-1172.4         -1174.4         N/A             N/A 
-6.5            -6.4            N/A             N/A 
-.3             -.3             N/A             N/A 
1351.8          1351.8          N/A             N/A 
38.3            38.0            N/A             N/A 
-21.6           -21.9           N/A             N/A 
-4.7            -4.5            N/A             N/A 
-5.0            -2.9            N/A             N/A 
3.1             3.3             N/A             N/A 
-20.1           -20.3           N/A             N/A 
-199.1          -199.3          N/A             N/A 
346.5           346.7           N/A             N/A 
-.8             -.4             N/A             N/A 
14.8            14.7            N/A             N/A 
8.4             8.4             N/A             N/A 
-18.2           -18.2           N/A             N/A 
-43.7           -43.6           N/A             N/A 

所需输出

Largest number is 1351.8

答案1

使用 Awk,强制对N/A条目进行数值计算:

awk '{for (i=1;i<=NF;i++) max = $i+0 > max ? $i : max} END{print "Largest number is " max}' data

答案2

一种方法可以是:

perl -lane '$_>$m and $m=$_ for @F}{print $m' sample.txt

解释:

  1. -n选项将按行处理您的输入文件。

  2. -e选项会将其后面的 Perl 代码应用于读取的每一行输入。

  3. -a选项将在读入各个字段时将每一行拆分并将它们存储在数组中@F

  4. -l选项将使 RS=ORS="\n"

  5. for @F将循环遍历每个字段,当前字段保存在$_.

  6. 我们将当前字段与最大值进行比较,如果它超过最大值,则更新最大值。

  7. 当我们完成比较后,}{我们打印 max 中的内容。

  8. 在数字上下文中sN/A应被视为 0,因此不会影响结果,除非所有数字一开始都是负数。

答案3

tr使用,sort和 的bash 风格的解决方案head

echo $(< file) | tr ' ' '\n' | sort -rn | head -1
  • echo $(< file)读取文件并回显结果。但由于我们没有在它周围加引号(echo "$(< file)"与 相同cat file),内容是一个长字符串,删除了换行符并压缩了空格
  • | tr ' ' '\n'tr通过用换行符替换每个空格字符来传递结果
  • | sort -rn将结果通过管道传递给sort,以相反的 (-r) 数字 (-n) 顺序对所有行进行排序(最大的数字在前)
  • | head -1将结果通过管道输出head到输出第一行

答案4

我已经通过下面的方法命令完成了

awk '{print $0}' o.txt | sed -r "s/\s+/\n/g"| sed '/^$/d'| sort | uniq| sed -n '/[0-9]/p'| awk 'BEGIN{sum=0;m=" "}($1 >sum){sum=$1}{m=sum}END{print m}'

输出

 awk '{print $0}' o.txt | sed -r "s/\s+/\n/g"| sed '/^$/d'| sort | uniq| sed -n '/[0-9]/p'| awk 'BEGIN{sum=0;m=" "}($1 >sum){sum=$1}{m=sum}END{print m}' 

输出

1351.8

相关内容