The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
ciclo while all'interno ciclo while panknil Shell scripting e di programmazione 0 01-07-2008 12:49 PM
Per loop xramm HP-UX 3 10-10-2007 03:20 PM
Mentre Loop hemangjani Shell scripting e di programmazione 2 11-02-2006 11:01 AM
per il ciclo munnabhai1 Shell scripting e di programmazione 3 04-06-2006 03:30 PM
come ottenere la funzione analoga a ciclo while loop o per trynew Shell scripting e di programmazione 3 06-17-2002 12:09 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 08-28-2007
Baghera baghera is offline
Utente Registrato
  
 

Join Date: Aug 2007
Interventi: 23
Mentre circuito con awk

Ciao, ho recentemente inviato in un altro thread iniziato da me . Ma in uno sforzo per rendere più bello il mio script che ho pensato mentre abbout loop.

Eseguire il mio script con il comando:

sh script 4 numbers.txt

E il mio script è simile a questo:

Codice:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1

while columns>0
do
	awk_cmd=`awk '{sum+=$i} END {print "\n" sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done
Il punto dello script è quello di tenere un elenco ($ 2) $ 1 e produrre il numero di colonne e quindi stampare la media di ogni colonna. Ma appare un messaggio di errore quando si esegue lo script:

colonne: non trovato

E non vedo il problema. Forse ci sono alcuni altri problemi con lo script come bene. Per favore mi illumini.
  #2 (permalink)  
Old 08-28-2007
robotronic's Avatar
robotronic robotronic is offline Forum Advisor  
Posso giocare con la follia?
  
 

Iscriviti Data: aprile 2002
Posizione: Italia
Interventi: 370
In primo luogo, la condizione di prova è sbagliato. Usa questo:

Codice:
while [ "$columns" -gt 0 ]
In secondo luogo, se si vuole passare il "$ i" valore di awk provare questo:

Codice:
awk_cmd=`awk -v i=$i '{sum+=i} END {print "\n" sum/NR}'`
  #3 (permalink)  
Old 08-28-2007
Baghera baghera is offline
Utente Registrato
  
 

Join Date: Aug 2007
Interventi: 23
Ok ho fatto come lei ha detto:

Codice:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
	awk_cmd=`awk -v i=$1 '{sum+=$i} END {print sum/NR}'`
   	echo "$data | $awk_cmd"
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done
Ma poi ho questo tipo di errore:

>> Sh reader4 4 testfil.txt
awk: errore di sintassi vicino la linea 1
awk: salvataggio vicino fuori linea 1
2 2 1 1
1 1 1 1 |
awk: errore di sintassi vicino la linea 1
awk: salvataggio vicino fuori linea 1
2 2 1 1
1 1 1 1 |
awk: errore di sintassi vicino la linea 1
awk: salvataggio vicino fuori linea 1
2 2 1 1
1 1 1 1 |
awk: errore di sintassi vicino la linea 1
awk: salvataggio vicino fuori linea 1
2 2 1 1
1 1 1 1 |

Quello che voglio è che passa attraverso ogni colonna su ogni esecuzione in loop e stampe, mentre la corrispondente media. Ma ho davvero apprezzato l'aiuto, io sono stato in alcuni forum in cui si ottiene slammered perché, forse, domande stupide.
  #4 (permalink)  
Old 08-28-2007
aigles's Avatar
Aigles aigles is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: aprile 2004
Località: Bordeaux, Francia
Messaggi: 1.423
Non è necessario il awk_cmd comando:
Codice:
data=`cat $2 | xargs -n $1`

#echo $data

columns=$1
i=1
echo $columns

while [ "$columns" -gt 0 ]
do
   	echo "$data" | awk -v i=$1 '{sum+=$i} END {print sum/NR}'
	i=`expr $i + 1`
	columns=`expr $columns - 1`
done
Se si desidera conservare, è necessario utilizzare il eval comando:
Codice:
	awk_cmd="awk -v i=$1 '{sum+=$i} END {print sum/NR}'"
	echo "$data" | eval $awk_cmd
Jean-Pierre.
  #5 (permalink)  
Old 08-28-2007
Baghera baghera is offline
Utente Registrato
  
 

Join Date: Aug 2007
Interventi: 23
Grazie Jean-Pierre, ora non ho ricevuto alcun errore. Ma l'uscita è strano.

Se ho l'elenco:

1
2
1
2

Ciò produrre:
1 2
1 2

Quindi, l'output dovrebbe essere il 1 e 2 (1 +1 / 2 e 2 +2 / 2), in questo modo:
1
2

Ma invece mi

2
2

C'è qualcosa che non va con il modo in cui io vado su questo problema.

echo "$ data" | awk-VI \u003d $ 1 '(somma + \u003d $ i) END (print somma / NR)'

C'è qualcosa di sbagliato con l'uso NR qui? Ma mettere un numero non sembra aiutare. Ho provato con 2, ma invece di NR (stessa lista di cui sopra), ma ancora ho:

2
2

C'è un problema con la divisione sto facendo?

Modifica: Ho appena fatto eco dati e l'output è disponibile in una sola riga 1 2 1 2 è così probabilmente ha qualcosa a che fare con il mio problema.

Ultima modifica da Baghera; al 08/28/2007 02:50 PM..
  #6 (permalink)  
Old 08-28-2007
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderatore
  
 

Iscriviti Data: febbraio 2005
Località: Boston, MA
Messaggi: 5.122
Io non capisco perché lei tranquilla tutte le necessità di codifica quando si può fare tutto in awk:

nawk-f bag.awk MyFile

bag.awk:
Codice:
{
   for(i=1; i<=NF; i++)
       sum[i] += $i
   nf=NF
   nr=NR
}

END {
    for(i=1; i<=nf; i++)
        print sum[i]/nr
}

Ultimo a cura di vgersh99; al 08/28/2007 03:14 PM..
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 12:38 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0