calcoli su array in awk

Se avete dubbi o domande sulla programmazione in generale, fatele qui
Rispondi
ash_79
Newbie
Messaggi: 5
Iscritto il: 21 novembre 2016, 14:12

calcoli su array in awk

Messaggio da ash_79 » 21 novembre 2016, 14:27

Ciao a tutti, ho la necessità di creare un programma che legga il contenuto da vari file (tutti strutturati in modo uguale con 2 colonne separate da ":" ), lo unisca in un unico file, controlli tutti i valori della prima colonna e se ce ne sono di doppi, deve sommare i valori della seconda. Cerco di spiegarmi con un eempio.
File A
100:10
150:25
300:50
500:60
800:134
1300:220

file B
100:30
200:2
300:15
700:80

Leggo i 2 file sopra indicati e li unisco in un unico file
file C
100:10
150:25
300:50
500:60
800:134
1300:220
100:30
200:2
300:15
700:80

eseguo i controlli del caso per ottenere questo risultato:
file D
100:40
150:25
200:2
300:65
500:60
700:80
800:134
1300:220

fatto questo la parte finale prevede che debba dividere ogni valore della seconda colonna per un numero "fisso" che varia in base al valore del numero della prima colonna per ottenere il risultato finale.

Spero sia chiaro.
Grazie per l'aiuto in anticipo.
Dimenticavo, le varie funzioni awk le devo implementare all'interno di uno script in csh.

Avatar utente
TheSaint
Robin Hood
Messaggi: 7919
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: calcoli su array in awk

Messaggio da TheSaint » 21 novembre 2016, 16:54

F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

ash_79
Newbie
Messaggi: 5
Iscritto il: 21 novembre 2016, 14:12

Re: calcoli su array in awk

Messaggio da ash_79 » 21 novembre 2016, 17:05

Ciao, grazie per la risposta, il sito da te segnalato ce l'ho nei preferiti, ma non riesco a fare quanto spiegato.

Avatar utente
TheSaint
Robin Hood
Messaggi: 7919
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: calcoli su array in awk

Messaggio da TheSaint » 22 novembre 2016, 6:58

Mostra quali errori incontri, mostra come hai messo il tuo script.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

ash_79
Newbie
Messaggi: 5
Iscritto il: 21 novembre 2016, 14:12

Re: calcoli su array in awk

Messaggio da ash_79 » 22 novembre 2016, 8:34

Ciao, il codice è questo:

Codice: Seleziona tutto

DO_INFO -t layer -e $JOB/panel/drlo -d TOOL -p count+drill_size -o break_sr,units=mm
echo $gTOOLcount > $GENESIS_TMP/${JOB}_h.txt
echo $gTOOLdrill_size > $GENESIS_TMP/${JOB}_s.txt
awk 'BEGIN{RS=" "} {print $1}' $GENESIS_TMP/${JOB}_h.txt > $GENESIS_TMP/${JOB}_hit.txt
awk 'BEGIN{RS=" "} {print $1}' $GENESIS_TMP/${JOB}_s.txt > $GENESIS_TMP/${JOB}_size.txt

paste -d':' $GENESIS_TMP/${JOB}_size.txt $GENESIS_TMP/${JOB}_hit.txt > $GENESIS_TMP/${JOB}a.txt
sort -n -k 1 $GENESIS_TMP/${JOB}a.txt > $GENESIS_TMP/${JOB}.txt

#awk 'BEGIN {sum=0}; sum+=$1 {}; END {print sum}' $GENESIS_TMP/${JOB}_hit.txt > $GENESIS_TMP/${JOB}a.txt
Con l'ultima linea che ho lasciato commentata faccio la somma di una colonna, ma non riesco a trovare il modo per farla con i dati in 2 colonne come descritto in precedenza.

ash_79
Newbie
Messaggi: 5
Iscritto il: 21 novembre 2016, 14:12

risolto: calcoli su array in awk

Messaggio da ash_79 » 22 novembre 2016, 10:18

Risolto con questo

Codice: Seleziona tutto

awk '{ tot[$1] += $2 } END { for (num in tot) print num, tot[num] }' $GENESIS_TMP/${JOB}.txt > $GENESIS_TMP/${JOB}_o.txt
grazie lo stesso

ash_79
Newbie
Messaggi: 5
Iscritto il: 21 novembre 2016, 14:12

Re: calcoli su array in awk

Messaggio da ash_79 » 22 novembre 2016, 14:36

Ciao a tutti, sono ancora qui in quanto mi manca l'ultima parte per terminare il lavoro.
Ora sono bloccato a questo punto

Codice: Seleziona tutto

set lista = `cat $GENESIS_TMP/drill.txt`
foreach list ($lista) 
	set a = `grep "D${list}:" G:/sys/scripts/battute_drill | cut -d":" -f2`
	set a1 = `echo "(($lista[2] / $a)+1)" | bc`
	echo $list $lista[2] $a1 >> $GENESIS_TMP/ris.txt
end
il file di partenza "drill.txt è strutturato in 2 colonne, ma il codice così come l'ho scritto io non lavora bene, in quanto l'array è composto da tutti i valori all'interno di questo file, mentre io voglio lavorare solo con la prima colonna.

Avatar utente
TheSaint
Robin Hood
Messaggi: 7919
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: calcoli su array in awk

Messaggio da TheSaint » 23 novembre 2016, 13:42

Allega il file di origine, magari si prova a seguire il tuo processo, con dati simili.
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Rispondi