как найти максимальное значение в определенном столбце, например каждые 5 строк

find. -name excludeme -prune -o \
  \( -name '*.c' -o -name '*.h' \) -print

Помните, что И(неявный )имеет приоритет над ИЛИ(-o). (см. также-name '*.[ch]')

0
07.10.2019, 12:52
3 ответа
$ awk '(NR-1) % 5 == 0 { m=$1; for (i=2; i<=NF; ++i) m=($i>m ? $i : m); print m }' file
2.14E+06
2.35E+06
2.33E+06
3.66E+06

или, с явным ifутверждением:

$ awk '(NR-1) % 5 == 0 { m=$1; for (i=2; i<=NF; ++i) if ($i > m) m = $i; print m }' file
2.14E+06
2.35E+06
2.33E+06
3.66E+06

Программа awkиспользует (NR-1) % 5 == 0для запуска блока кода для строк 1, 11, 16 и т. д. Блок находит наибольшее значение в строке и печатает его.

NR— номер текущей записи (— номер строки по умолчанию ), а NF— количество полей (столбцов )в текущей записи.

Если вы всегда хотите получить последний столбец , используйте гораздо более быстрый

$ awk '(NR-1) % 5 == 0 { print $NF }' file
2.14E+06
2.35E+06
2.33E+06
3.66E+06
1
28.01.2020, 02:22
$ awk '{max = ((max=="") || ($6 > max) ? $6 : max)} !(NR%5){print max; max=""}' file
2.14E+06
2.35E+06
3.19E+06
3.66E+06
1
28.01.2020, 02:22
$ perl -lane '
    $F[5] > ($m //= -InF) and $m = $F[5];
    $. % 5 or print, undef for $m;
' file 

2.14E+06
2.35E+06
3.19E+06
3.66E+06
1
28.01.2020, 02:22

Теги

Похожие вопросы