2007-02-28, 15:00
  #1
Medlem
Masse112s avatar
Hej!
Jag har en skoluppgift som jag inte får att fungera korrekt, eller rättare sagt en deluppgift. Uppiften lyder att lista att aktiva processer(lsof) skriva det till en fil och hämta ut uppgifter från filen med hjälp av awk.script. Den delen som krånglar är den där man skall lista den process med största storlek respektive minsta.

scriptet ser ut som följande:

Kod:
BEGIN { max=0; min=10000000000;}
{
if ($7>max) {max=$7}



if ($7<min && $7>0) {min=$7}


}
END { print "Max:", max, "Min:", min }


När jag kör scriptet får jag resultatet Max: TCP Min: 13

Varifrån kommer TCP? 13 är också fel svar.
Vad är det som inte fungerar i mitt script?
Jag har en liknande uppgift med en if-sats och den fungerar alldeles utmärkt.

Tack på förhand!!
Citera
2007-02-28, 16:06
  #2
Medlem
blueCommands avatar
Värför använder du lsof för att lista processer?

losf listar öppna filer, ps visar processer. Ang TCP är det väll för att du har fel offset på någon kolumn.
Citera
2007-02-28, 16:11
  #3
Medlem
acuras avatar
Det är troligtvis så att du inte kontrollerar vad det är för data som evalueras och där med så evalueras strängen TCP högre än någon utav de numeriska värden du får.

Om du lägger till print $7 någon stans så ser du ju vad det är för värden som jämförs.
Citera
2007-02-28, 16:43
  #4
Medlem
Masse112s avatar
Citat:
Ursprungligen postat av blueCommand
Värför använder du lsof för att lista processer?

losf listar öppna filer, ps visar processer. Ang TCP är det väll för att du har fel offset på någon kolumn.

Jag har i samma uppgift och med samma textfil räknat ut summan, medelvärde, LW och HW osv. Det är nog helt frågan om samma kolumn.

Öppna filer är det som jag skall lista, inte processer som jag felaktigt skrev.

Endel filer har ingen storlek tillgänglig, kan det vara det som krånglar till det?
Citera
2007-02-28, 17:18
  #5
Medlem
Masse112s avatar
Citat:
Ursprungligen postat av acura
Det är troligtvis så att du inte kontrollerar vad det är för data som evalueras och där med så evalueras strängen TCP högre än någon utav de numeriska värden du får.

Om du lägger till print $7 någon stans så ser du ju vad det är för värden som jämförs.


jag gjorde det och de flesta är tal med det kommer med oxå sånt som permission, readlink osv... beror väl på att för vissa filer så visas ingen storlek. Endel filer har tomt i vissa kolumner. Och då tar den förstås den sjunde som inte är storleken.

Går det att på något sätt med villkor på lsof när man skapar textfilen att endast ta med filer som har värden i alla kolumner? Eller hur skall man lösa det? som i java?(isNaN)
Citera
2007-02-28, 17:30
  #6
Medlem
acuras avatar
Kod:
BEGIN { max=0; min=10000000000;}
{
if ($7 ~ /[0-9]+/) {
   if ($7>max) {max=$7}



   if ($7<min && $7>0) {min=$7}

}
}
END { print "Max:", max, "Min:", min }

Nu borde fungera som det är tänkt.

Edit: Så här gjorde jag för att ta ut högsta och lägsta PID som var det jag trodde du ville ha först.
Kod:
BEGIN { 
    FS="[^0-9 ]*" 
    liten=10000 
    max=0
}

{   
for (i=1; i<=NF; i++) {
    if ($1 ~ /[0-9]+/) {
        if ($1 < liten) {
            liten=$1
        }   
        else {liten=liten}
        if ($1 > max) {
            max=$1
        }   
        print $1
    }   
}
}

END { 
    print "Max: ", max, " Min: ", liten, "|" 
}
Citera
2007-02-28, 18:00
  #7
Medlem
Masse112s avatar
Citat:
Nu borde fungera som det är tänkt.


Tack för hjälpen, nu fungerar det
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in