Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    796

    [Robba tosta] Da file di testo a xls

    Hola. Ho un file di testo così composto:

    codice:
    IAD: 1
    IP: 101.84.187.66
    FIRMWARE: 4.0.16
    MODELLO: SV1242
    IAD: 2
    IP: 101.58.8.83
    FIRMWARE: 4.0.18
    MODELLO: SV1242
    IAD: 3
    IP: 101.84.186.83
    IAD: 4
    IP: 101.78.208.2
    IAD: 5
    IP: 101.84.43.139
    MODELLO: ViNE2100
    FIRMWARE: 3.2.1g
    IAD: 6
    IP: 101.84.20.13
    FIRMWARE: 4.0.16
    MODELLO: SV1242
    IAD: 7
    IP: 101.78.24.228
    IAD: 8
    IP: 101.69.169.235
    MODELLO: ViNE1000
    FIRMWARE: 2.3.4b
    IAD: 9
    IP: 101.58.8.194
    FIRMWARE: 4.0.18
    MODELLO: SV1242
    Ad libitum fino a 10mila e rotti. Devo generarne un altro file che a sua volta sarà poi importato in excel, così composto:

    codice:
    IAD    IP              MODELLO    FIRMWARE
    
    1      101.84.187.66   SV1242     4.0.16
    2      101.58.8.83     SV1242     4.0.18
    3      101.84.186.83   DOWN       DOWN
    4      101.78.208.2    DOWN       DOWN
    5      101.84.43.139   ViNE2100   3.2.1g
    6      101.84.20.13    SV1242     4.0.16
    7      101.78.24.228   DOWN       DOWN
    8      101.69.169.235  ViNE1000   2.3.4b
    9      101.58.8.194    SV1242     4.0.18
    Problema: i router down non sono stati tracciati e la relativa riga con modello e firmware è inesistente nel file. Inoltre le righe con MODELLO e FIRMWARE sono spesso invertite.

    Contate che, importazione in excel a parte, devo poter fare tutto da shell. Idee?

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Io lo cambierei quel tag,cosa significa robba tosta?

  3. #3
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,995
    i file di testo sono facilmente importabili su excel, non vedo il caso di fare conversioni.

  4. #4
    codice:
    file="asd.txt"
    
    
    echo "IAD	IP			MODELLO		FIRMWARE";
    
    reset_infos() {
    	IAD=0
    	IP=""
    	FIRMWARE=""
    	MODELLO=""
    }
    
    flush() {
    	[ "$FIRMWARE" == "" ] && FIRMWARE="DOWN"
    	[ "$MODELLO" == "" ] && MODELLO="DOWN"
    	echo "$IAD	$IP		$MODELLO	$FIRMWARE"
    	
    	reset_infos
    }
    
    reset_infos
    
    while read line; do
    	var=$(echo "$line" | awk '{print $1}' | sed s/://)
    	[ "$var" == "IAD" ] && [ $IAD -gt 0 ] && flush
    	eval "$var"=$(echo "$line" | awk '{print $2}')
    done < "$file"
    
    flush
    L'importante è che alla fine del file ci sia un "a capo", altrimenti non viene letto il modello o il firmware dell'ultimo
    Le colonne invece non vengono allineate bene, ma excel dovrebbe importarlo lo stesso.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    796
    Grazie ma nel frattempo ho già risolto in altra sede

  6. #6

  7. #7
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,995
    Originariamente inviato da dAb
    Grazie ma nel frattempo ho già risolto in altra sede
    Sui forum non si viene solo per chiedere, sarebbe corretto anche fornire le soluzioni trovate.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    796
    Ho già dato, se per 1 [una, one, ein] volta in nove anni sono io a chiedere qualcosa causa vuoto mentale / mancanza di tempo / whatever non muore nessuno.

    Per un'esigenza così specifica dubito servirà mai a qualcun altro, comunque ecco qua:

    Codice PHP:
    import sys
    class router:
        
    attributi={"IAD":""}
    print 
    "log parser"
    if(len(sys.argv)<2):
        print 
    "missing input file"
        
    exit()
    else:
        print 
    len(sys.argv)
    fInput=open(sys.argv[1],"r")
    if(
    len(sys.argv)==2):
        
    fOutput=sys.stdout
    else:
        
    fOutput=open(sys.argv[2],"w")


    routers =[]
    def printToFile(r):
        if 
    r.attributi["IAD"]=="":
            return
        
    str=r.attributi["IAD"]+"\t"+r.attributi["IP"]+"\t";
        if 
    r.attributi.has_key("MODELLO"):
            
    str+= r.attributi["MODELLO"]
        else:
            
    str+= "DOWN"
        
    str+="\t"
        
    if r.attributi.has_key("FIRMWARE"):
            
    str+= r.attributi["FIRMWARE"]
        else:
            
    str+= "DOWN"
        
    str+="\t"
        
    fOutput.write(str+"\n")
    def load():
        
    rrouter()
        while 
    True:
            
    testo=fInput.readline()
            if 
    testo =="":
                
    printToFile(r)
                break
            
    index=testo.find(":");
            
    intestazione=testo[:index]
            
    dato=testo[index+1:len(testo)-1]
            
    #print intestazione,"-->",dato
            
    if intestazione=="IAD":
                
    printToFile(r);
                
    r=router()
                
    r.attributi={}
                
    #print "\n---\n"    
            
    r.attributi[intestazione]=dato
    load
    () 

  9. #9
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,995
    visto che un utente ti ha proposto uno script, qualche interesse c'è o c'è stato, mi sembrava doveroso divulgare l'alternativa al posto di un secco grazie.
    Comunque, a prima vista, mi sembra un codice python invece che php

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    796
    Il tag php è l'unico abilitato nel bbcode e si usa comunemente per formattare più o meno qualunque linguaggio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.