Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 21
1

Не работает сортировка в awk по минимуму

08.04.2016, 16:07. Показов 814. Ответов 5
Метки нет (Все метки)

Имею файл со столбцами имеющими цифровые значения. Задача найти минимальное и максимальное значение в конкретном столбце.
Bash
1
N=$N$(grep -rI $N | awk 'BEGIN{min=1000000; if($22<min) min=$22} END{print min}' ./*.log)
На выходе имею пустую строку.
Если же я ищу максимальное значение таким способом, то оно прекрасно находится.
Bash
1
N=$N$(grep -rI $N | awk 'BEGIN{max=0; if($22>max) max=$22} END{print max}' ./*.log)
Вопрос - где я неправ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2016, 16:07
Ответы с готовыми решениями:

Быстрая сортировка, ситуация, при которой сортировка работает не корректно
Procedure sort(m, l: Integer); Var i, j, x, w: Integer; Begin i := m; j := l; x...

По минимуму обезопасить сайт
Привет форумчанам!!! Ура! Наконец-то создала свой первый сайт. Теперь думаю о его безопасности....

Внешняя сортировка(сортировка последовательностей)Не работает
Вот начал смотреть прямое слияние. А она не выдает желаемых результатов. Вот последовательность к...

Комп для бухгалтера (по минимуму)
Добрый день! Снова я к вам за помощью:) Посоветуйте &quot;состав&quot; блока для бухгалтера. Собственно,...

5
3731 / 1512 / 259
Регистрация: 10.12.2013
Сообщений: 5,161
08.04.2016, 22:51 2
блок BEGIN надо закрыть после инициализации min;

max нулём можно не инициализировать, BEGIN не нужен.
0
Модератор
Эксперт NIX
2785 / 2033 / 680
Регистрация: 02.03.2015
Сообщений: 6,514
08.04.2016, 23:01 3
Научитесь нормально форматировать команды, тогда и ошибок меньше будет. А так вообще непонятно, как хоть что-то работать может при стольких серьёзных
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N=$N$(
    awk '
        $0 !~ N{
            next
        }
        ! first{
            max = $22
            first = 1
            next
        }
        max < $22{
            max = $22
        }
        END{
            print max
        }
        ' IGNORECASE=1 N=$N ./*.log
    )
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 21
11.04.2016, 10:37  [ТС] 4
блок BEGIN надо закрыть после инициализации min;
Изначально команда выглядела так:
Bash
1
N=$N$(grep -rI $N | awk 'BEGIN{min=1000000} if($22<min) min=$22} END{print min}' ./*.log)
Потом после долгих экспериментов команда приобрела вид указанный в топик старте.
Один чёрт - не работает. Почему с поиском максимума она работает, с поиском минимума нет, мне не понятно.

Научитесь нормально форматировать команды, тогда и ошибок меньше будет.
Согласен, форматировать надо. Буду учиться. Однако приведённая вами команда тоже не работает.
Пришлось изгаляться.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
N=$N$(
    awk '
        $0 !~ N{
            next
        }
        ! first{
            min = $22
            first == 1;
            next;
        min > $22
            min = $22
        }
        END{
            print min
        }
        ' IGNORECASE=1 N=$N ./*.log
    )
В итоге получил N=0, хотя минимальное значение 38644. В указанном вами примере как минимум одна { была непарной. Я посчитал её лишней. И касаемо внимательности, мне нужно было получить минимум, так как максимум считается правильно. Вы же прислали пример для максимума.
Касаемо же учёбы. Не могли бы вы посоветовать мне хороший самоучитель по bash и awk с примерами. А то в man примеров почти нет, и те что есть явно недостаточны для понимания всех тонкостей. Буду очень благодарен.
0
Модератор
Эксперт NIX
2785 / 2033 / 680
Регистрация: 02.03.2015
Сообщений: 6,514
11.04.2016, 20:21 5
Цитата Сообщение от Стас_тестировщи Посмотреть сообщение
команда тоже не работает
Если бы Вы приводили исходные данные, то я бы тестировал на них, а так проверяйте самостоятельно.
Цитата Сообщение от Стас_тестировщи Посмотреть сообщение
как минимум одна { была непарной
Исправил. Проверьте теперь.
Цитата Сообщение от Стас_тестировщи Посмотреть сообщение
нужно было получить минимум
В зависимости от знака при «<» будет мин, а при «>» максимум.
Цитата Сообщение от Стас_тестировщи Посмотреть сообщение
максимум считается правильно
Быть не может, так как синтаксически выражение построено неправильно.
Цитата Сообщение от Стас_тестировщи Посмотреть сообщение
хороший самоучитель
Advanced scripting guide — лучше не придумано пока.
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 21
12.04.2016, 17:00  [ТС] 6
Благодарю за помощь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2016, 17:00

Прибавлять к счетчику кратно минимуму
На сайте есть кнопка выбора количества товаров. Можно задать минимум меньше которого нельзя...

Нужен монитор, утомляющий глаза по минимуму
Всем добрый день! после того как 3 дня подряд промучился поиском хорошего монитора решил обратится...

Нохождение локального минимуму в двумерном массиве
Помогите решить такую задачу : Элемент матрицы называется локальным минимумом, если он строго...

Определение вероятности по максимуму и минимуму суммы
Дана последовательность положительных и отрицательных единиц, известна длина последовательности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.