Общий awk-скрипт для вычисления среднего по любому полю через аргумент командной строки

StackOverflow https://stackoverflow.com/questions/1434016

Вопрос

Я хочу написать общий сценарий awk, который может принимать в качестве входных данных файл и номер поля (в этом файле) и давать мне среднее значение этого поля в этом файле. Я бы использовал это примерно так:

bash$ avg.awk 3 input.file
22
bash$ avg.awk 4 input.file
2001

Конечно, я могу написать сценарий, если знаю, какое поле (например, $ 3) я собираюсь предварительно усреднить. Это было бы что-то вроде этого:

//{tot+=$3; count++}
END{
    print tot/count;
}

Но я хочу иметь возможность изменять поле, которое я хочу усреднить, с помощью параметра командной строки. Это возможно? Спасибо!

Это было полезно?

Решение

Этот будет делать то, что вы хотите:

$ cat avg.awk
#!/usr/bin/env awk -f
# Calculate average, syntax: avg.awk field-number file
BEGIN { field = ARGV[1]; ARGV[1] = "" }
{ sum += $field }
END { print sum / NR }

$ cat data
1 5 7
3 6 5
8 4 6

$ avg.awk 1 data
4

$ avg.awk 2 data
5

$ avg.awk 3 data
6

Другие советы

{ tot += $field; count++ }
END { print tot/count }

называть как awk -v field = 3 -f avg.awk input.file

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top