我知道awk有助于在文件的列中查找某些内容,但我不确定如何使用它来查找一组文件中列的最小值和最大值。有什么建议?具体来说,我在目录中有四个文件,我想通过awk。
答案 0 :(得分:1)
如果您要查找所有文件中列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 }' "$@"
答案 1 :(得分:0)
试试这个:它会以逗号分隔给文件中的min和max。
简单:
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
答案 2 :(得分:0)
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): 90