Два варианта:
awk
один раз для каждого файла или awk
все файлы и позвольте ему вычислить среднее значение для каждого и сообщить о ходе выполнения. Сортировка результата любого из приведенных ниже решений может быть выполнена путем передачи их вывода через
sort -k2,2rn
Это выполняет обратную числовую сортировку второго поля (среднего ).
Первое решение:
#!/bin/sh
for name in "$1"/*.dat; do
test -f "$name" || continue # skip non-files
awk -F '>' '/<Overall>/ { s+=$NF; n++ } END { print FILENAME, s/n }' "$name"
done
Этот сценарий ожидает имя каталога в командной строке в качестве первого и единственного аргумента командной строки. Скрипт awk
найдет все строки, содержащие строку Overall
, и суммирует (вs
)значение после >
в этой строке. В конце вместе с именем файла выводится среднее значение. Переменная n
содержит количество добавлений к s
.
Второе решение (требует GNU Awk):
#!/bin/sh
find "$1" -maxdepth 1 -type f -name '*.dat' \
-exec awk -F '>' '/<Overall>/ { s+=$NF; n++ } ENDFILE { print FILENAME, s/n; s=n=0 }' {} +
Этот сценарий, как и первый, ожидает имя каталога в качестве единственного аргумента командной строки. Он использует find
для выполнения скрипта awk
с максимально возможным количеством файлов .dat
.
Сценарий awk
использует триггер GNU Awk ENDFILE
для вывода рассчитанных значений и сброса переменных s
и n
после обработки каждого файла перед началом чтения следующего файла.
Это также могло быть написано как
#!/bin/sh
awk -F '>' '/<Overall>/ { s+=$NF; n++ } ENDFILE { print FILENAME, s/n; s=n=0 }' "$1"/*.dat
но это зависит от "$1"/*.dat
не расширяющегося до слишком длинного списка имен файлов (для этого также требуется, чтобы каждое .dat
имя было обычным файлом, что вышеприведенная команда find
гарантирует с -type f
).
Число после /
— это размер подсети, который равен (почти )и всегда равен /64 в IPv6. Это ничего не говорит о вашей локальной машине. Как и в случае с IPv4, вам все равно придется назначать интерфейсу каждый отдельный адрес.
С IPv4 вы можете писать как 192.168.0.1/24
, так и 192.168.0.1/255.255.255.0
. Они означают то же самое.
В IPv6 запись<REDACTED>:48ea::1/ffff:ffff:ffff:ffff::
(или даже<REDACTED>:48ea::1/ffff:ffff:ffff:ffff:0000:0000:0000:0000
)стала бы немного громоздкой, поэтому используется только нотация <REDACTED>:48ea::1/64
.