Puncte:0

jucați cu comanda awk încercând să eliminați prima linie din intrare

drapel kg

mai jos este fișierul meu de intrare, rezultatele continuă să revină „Breed are Votes voturi”

    Rasă, Voturi
    Black Lab, 30
    Chihuahua, 2
    Pug, 1
    Corgi, 45
    Shar Pei, 21 de ani
    Shih Tzu, 5
    malteză, 7

#!/bin/sh/awk
##comment Scriptul awk de mai jos rulează pe fișierul dog_breed.txt, FS se referă la separatorul de câmpuri care este o virgulă în acest caz. Inițializam variabila noastră maximă la 0 și max_breed la prima rasă, apoi iterăm peste rânduri pentru a găsi rasa maximă votată.
    
    ÎNCEPE{
            FS=", "
            max=0;
            max_breed=1 USD
    }
    {
            dacă(max<($2)){
                    max=2$;
                    max_breed=$1;
            }
    }
    SFÂRŞIT{
            print max_breed " are " max " voturi"
    }
Puncte:1
drapel hr

Puteți sări peste prima înregistrare (linie) adăugând a regulă la bloc:

NR > 1 {
        dacă(max<($2)){
                max=2$;
                max_breed=$1;
        }
}

Cu toate acestea, merită să încercați să înțelegeți de ce obțineți rezultatul pe care îl obțineți atunci când obțineți nu excludeți prima linie - asta pentru că:

  • când NR==1, valoarea a max este 0 (numeric - atribuit în ÎNCEPE bloc) dar valoarea lui $2 este Voturi (care este un șir). Deci expresia max<($2) convertiți max la un șir și efectuează o comparație lexicografică. Dacă 0 e mai puțin decât V în localitatea dvs., atunci rezultatul este TRUE și max i se atribuie valoare șir Voturi

  • pentru liniile ulterioare, $2 este numeric, dar max este acum un șir deci $2 este convertit într-un șir și din nou comparația este lexicografică. Presupunând V are o pondere lexicografică mai mare decât oricare dintre cifre 0 prin 9, V castiga intotdeauna.

În afară de asta, shebang-ul tău pare invalid - probabil că ar trebui să fie

#!/usr/bin/awk -f

sau

#!/bin/awk -f

în funcție de versiunea Ubuntu. De asemenea, sarcini precum max_breed=1 USD nu sunt cu adevărat semnificative într-un ÎNCEPE bloc, deoarece este executat inainte de orice înregistrări au fost procesate.

Puncte:0
drapel cn

Pentru a elimina prima linie cu awk:

awk „NR>1” fișier_de intrare

Sau folosește coada:

coada -n+2 fișier de intrare
iwantcaketoo avatar
drapel kg
cum aș implementa în cod, când l-am adăugat, mi-a dat o valoare incorectă
iwantcaketoo avatar
drapel kg
Știu că pot întotdeauna să fac cat dogbreed.csv | coada -n+2 | awk -F',' 'BEGIN{breed="";votes=0;}{if($2>voturi){votes=$2;breed=$1;}}END{print breed " are "voturi" voturi";} '
iwantcaketoo avatar
drapel kg
dar instrucțiunile indică Dacă nu se specifică altfel, fișierul dvs. de script va fi testat pe sistemul nostru cu următoarea comandă: awk -f

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.