Why wont this awk script work, where I want to print the min and max of an input by just reading the data once. I would also like to initialize the min and max variable with the first value of the data.
Say I have a file
JavaScript
x
a 14
a 34
a 234
a 2345
a 1
a 24
I am using awk to print the min and max with:
JavaScript
cat test.txt | awk 'BEGIN {min=$2; max=$2} {if ($2 < min) {min=$2}; if ($2 > max) {max=$2} } END {print "min: " min "max: " max}'
But I am getting a result of:
JavaScript
min: max: 2345
I dont understand why min is set to blank?
Advertisement
Answer
The BEGIN {}
block is processed before the first line so $2
is undefined.
JavaScript
$ cat file
a 14
a 34
a 234
a 2345
a 1
a 24
$ awk 'NR == 1 { min = max = $2; next }
$2 > max { max = $2 }
$2 < min { min = $2 }
END { print "min: " min ", max: " max }' file
min: 1, max: 2345