首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk在某些文件中搜索列的最小和最大值

如何使用awk在某些文件中搜索列的最小和最大值
EN

Stack Overflow用户
提问于 2017-04-02 05:25:02
回答 3查看 3.9K关注 0票数 1

我知道awk在尝试查找文件列中的某些内容时很有帮助,但我不确定如何使用它来查找一组文件中某列的最小值和最大值。有什么建议吗?具体地说,我在一个目录中有四个文件,我想用它们来访问awk。

EN

回答 3

Stack Overflow用户

发布于 2017-04-02 12:24:25

如果要查找所有文件的列N的绝对最大值和最小值,则可以使用:

代码语言:javascript
复制
N=6
awk -v N=$N 'NR == 1 { min = max = $N }
                     { if ($N > max) max = $N; else if ($N < min) min = $N }
             END     { print min, max }' "$@"

您可以使用命令行选项或通过编辑脚本(粗略但有效-使用选项处理)或任何其他您喜欢的方法来更改列号。

如果您想要每个文件的列N的最大值和最小值,那么您必须检测新文件,并且可能还希望标识这些文件:

代码语言:javascript
复制
 awk -v N=$N 'FNR == 1 { if (NR != 1) print file, min, max; min = max = $N; file = FILENAME }
                       { if ($N > max) max = $N; else if ($N < min) min = $N }
              END      { print file, min, max }' "$@"
票数 2
EN

Stack Overflow用户

发布于 2017-04-02 05:33:19

试试这个:它将在文件中给出最小和最大值,并用逗号分隔。

简单:

代码语言:javascript
复制
awk 'BEGIN {max = 0} {if ($6>max) max=$6} END {print max}' yourfile.txt

代码语言:javascript
复制
awk 'BEGIN {min=1000000; max=0;}; { if($2<min && $2 != "") min = $2; if($2>max && $2 != "") max = $2; } END {print min, max}' file

或者更尴尬的方式:

代码语言:javascript
复制
awk 'NR==1 { max=$1 ; min=$1 }
     FNR==NR { if ($1>=max) max=$1 ; $1<=min?min=$1:0 ; next}
     { $2=($1-min)/(max-min) ; print }' file file
票数 0
EN

Stack Overflow用户

发布于 2017-04-02 07:58:45

sort可以进行排序,您可以通过任何方式选择第一个和最后一个,例如,使用awk

代码语言:javascript
复制
sort -nk2 file{1..4} | awk 'NR==1{print "min:"$2} END{print "max:"$2}'

按文件file1、file2、file3、file4的第二个字段进行数字排序,并打印最小值和最大值。

由于您没有提供任何输入文件,下面是文件的工作示例

代码语言:javascript
复制
==> file_0 <==
23 29 84
15 58 19
81 17 48
15 36 49
91 26 89

==> file_1 <==
22 63 57
33 10 50
56 85 4
10 63 1
72 10 48

==> file_2 <==
25 67 89
75 72 90
92 37 89
77 32 19
99 16 70

==> file_3 <==
50 93 71
10 20 55
70 7 51
19 27 63
44 3 46

如果运行该脚本,现在使用变量列号n

代码语言:javascript
复制
n=1; sort -k${n}n file_{0..3} | 
awk -v n=$n 'NR==1{print "min ("n"):",$n} END{print "max ("n"):",$n}'

你会得到

代码语言:javascript
复制
min (1): 10
max (1): 99

对于n的其他值

代码语言:javascript
复制
n=2; sort ...

min (2): 3
max (2): 93

n=3; sort ...

min (3): 1
max (3): 90
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43162181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档