我知道awk在尝试查找文件列中的某些内容时很有帮助,但我不确定如何使用它来查找一组文件中某列的最小值和最大值。有什么建议吗?具体地说,我在一个目录中有四个文件,我想用它们来访问awk。
发布于 2017-04-02 12:24:25
如果要查找所有文件的列N的绝对最大值和最小值,则可以使用:
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的最大值和最小值,那么您必须检测新文件,并且可能还希望标识这些文件:
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 }' "$@"发布于 2017-04-02 05:33:19
试试这个:它将在文件中给出最小和最大值,并用逗号分隔。
简单:
awk 'BEGIN {max = 0} {if ($6>max) max=$6} END {print max}' yourfile.txt或
awk 'BEGIN {min=1000000; max=0;}; { if($2<min && $2 != "") min = $2; if($2>max && $2 != "") max = $2; } END {print min, max}' file或者更尴尬的方式:
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发布于 2017-04-02 07:58:45
sort可以进行排序,您可以通过任何方式选择第一个和最后一个,例如,使用awk
sort -nk2 file{1..4} | awk 'NR==1{print "min:"$2} END{print "max:"$2}'按文件file1、file2、file3、file4的第二个字段进行数字排序,并打印最小值和最大值。
由于您没有提供任何输入文件,下面是文件的工作示例
==> 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
n=1; sort -k${n}n file_{0..3} |
awk -v n=$n 'NR==1{print "min ("n"):",$n} END{print "max ("n"):",$n}'你会得到
min (1): 10
max (1): 99对于n的其他值
n=2; sort ...
min (2): 3
max (2): 93
n=3; sort ...
min (3): 1
max (3): 90https://stackoverflow.com/questions/43162181
复制相似问题