Рейтинг:0

играя с командой awk, пытаясь удалить первую строку ввода

флаг kg

ниже мой входной файл, результаты продолжают возвращать «Порода имеет голоса голосов»

    Порода, Голоса
    Черная Лаборатория, 30
    Чиуауа, 2
    Мопс, 1
    Корги, 45 лет
    Шарпей, 21 год
    Ши-тцу, 5
    Мальтийский, 7

#!/bin/sh/awk
##comment Приведенный ниже awk-скрипт выполняется в файле dog_breed.txt, FS относится к разделителю полей, который в данном случае является запятой. Мы инициализируем нашу переменную max значением 0, а max_breed — первой породой, затем перебираем строки, чтобы найти породу с максимальным числом голосов.
    
    НАЧИНАТЬ{
            ФС=", "
            макс=0;
            max_breed=$1
    }
    {
            если (макс.<($2)){
                    макс=$2;
                    max_breed=$1;
            }
    }
    КОНЕЦ{
            print max_breed "имеет " максимальное " количество голосов"
    }
Рейтинг:1
флаг hr

Вы можете пропустить первую запись (строку), добавив правило к блоку:

НО > 1 {
        если (макс.<($2)){
                макс=$2;
                max_breed=$1;
        }
}

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

  • когда NR==1, значение Максимум является 0 (числовой - присваивается в НАЧИНАТЬ блок), но значение $2 является Голоса (это строка). Итак, выражение макс<($2) обращает Максимум к строке и выполняет лексикографическое сравнение. Если 0 меньше чем В в вашей локали, тогда результат ИСТИНА, и Максимум назначается строковое значение Голоса

  • для последующих строк, $2 является числовым, но Максимум теперь это строка, поэтому $2 преобразуется в строку, и снова сравнение является лексикографическим. Предполагая В имеет больший лексикографический вес, чем любая из цифр 0 через 9, В всегда побеждает.

Кроме того, ваш шебанг выглядит недействительным - вероятно, он должен быть

#!/usr/bin/awk -f

или же

#!/bin/awk -f

в зависимости от вашей версии Ubuntu. Кроме того, такие задания, как max_breed=$1 не имеют особого смысла в НАЧИНАТЬ блок, так как он выполняется перед все записи обработаны.

Рейтинг:0
флаг cn

Чтобы удалить первую строку с помощью awk:

awk 'NR>1' входной_файл

Или используйте хвост:

хвост -n+2 входной-файл
iwantcaketoo avatar
флаг kg
как бы я внедрил в код, когда я добавил его, он дал мне неправильное значение
iwantcaketoo avatar
флаг kg
я знаю, что всегда могу сделать cat dogbreed.csv | хвост -n+2 | awk -F',' 'НАЧАЛО{breed="";votes=0;}{if($2>votes){votes=$2;breed=$1;}}END{распечатать породу " имеет " голосов " голосов";} '
iwantcaketoo avatar
флаг kg
но в инструкциях указано, что если не указано иное, ваш файл сценария будет протестирован в нашей системе с помощью следующей команды: авк -ф

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.