![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her. |
Mere UNIX og Linux Forum Emner du måske kan finde Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Last Post |
| mens loop inde mens loop | panknil | Shell Programmering og Scripting | 0 | 01-07-2008 12:49 PM |
| For loop | xramm | HP-UX | 3 | 10-10-2007 03:20 PM |
| Mens Loop | hemangjani | Shell Programmering og Scripting | 2 | 11-02-2006 11:01 AM |
| for løkke | munnabhai1 | Shell Programmering og Scripting | 3 | 04-06-2006 03:30 PM |
| hvordan du får den tilsvarende funktion i mens sløjfe eller løkke | trynew | Shell Programmering og Scripting | 3 | 06-17-2002 12:09 PM |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
Mens sløjfe med awk
Hvordan man laver et stykke tid-loop med awk.
Lad os sige jeg har et variabelt antal kolonner: 1 4 3 2 4 4 3 5 3 Nu vil jeg gerne tilføje alle elementer i kolonne 1, 2 og 3 og derefter dele dem med antallet af elementer i hver. kolonner \u003d antallet af kolonner, der er givet som et argument til min script i \u003d kolonnen vi tilfører for øjeblikket Dette er nogle pseudo-kode for det, jeg ønsker at gøre: mens [kolonner> 0] gøre awk '(sum + \u003d $ i) END (print sum / NR "\ t") " i + + kolonne -- gjort Så når henrettet det færdige resultat vil være: 2 6,5 3,333333 Men jeg kan ikke få min mens loop til at fungere. Please help me. Dette er min kode: ############################# mens [ "$ kolonner"-gt 0] gøre awk_cmd \u003d `awk-VI \u003d $ 1 '(sum + \u003d $ i) END (print sum / NR)'` echo "$ data | $ awk_cmd" i \u003d `expr $ i + 1« kolonner \u003d `expr $ kolonner - 1« gjort ############################# |
|
||||
|
vil dette arbejde?
Code:
awk -f temp.awk tempfile Code:
{ for(i=1;i<=NF;i++) { sum[i]+=$i } }
END { for (i in sum) {printf("%f\t", sum[i]/NR) } }
Citat:
Sidst redigeret af ranj @ chn; 08-30-2007 på 11:41 AM.. Årsag: tilføje kommentarer |
|
|||||
|
Citat:
Jeg mener, vi allerede har været igennem denne øvelse en gang i en af de tidligere tråde. Hvad er det præcist, at du ikke forsøger at gøre anderledes? Hvis du forsøge at beregne den gennemsnitlige værdi pr kolonne for alle rækker - denne løsning er også blevet fremlagt som en del af den tidligere tråd. Prøv at forstå de tidligere løsning og / eller tilpasse den til dit "nye" [???] krav. |
|
||||
|
Citat:
Så mit script hidtil er: cat $ 1 | grep "resultater" | grep "få numre" | xargs-n $ 2 Det er lidt mere avancerede derefter kommandoen ovenfor, men dette er kun så du får hele billedet. Det producerer kolonner med værdier fra filer navngives $ 1 og antallet af kolonner bestemmes af $ 2. Nu, da $ 2 er en variabel Jeg ved ikke, hvor mange kolonner der bliver. Det vil ikke være mange, lad os sige omkring 2-10 være tilstrækkeligt. Jeg har brug for, som jeg tidligere erklærede gå gennem hver kolonne tilføje dem og derefter dividere dem med antallet af elementer i hver kolonne. Så hvis output fra følgende kommando ovenfor er: 1 4 2 5 3 6 4 7 5 8 Resultatet bør være: 3 6 Hvilket er gennemsnittet for hver af de kolonner. Jeg har gjort noget som dette, men den lader ikke til at arbejde, mens [$ j> 0] gøre cat listen | awk '(sum + \u003d $ i) END (print sum / NR)' i \u003d $ [$ i +1] j \u003d $ [$ j-1] gjort awk synes at have problemer med $ i. Men jeg har brug for dette for at være en variabel, men awk siger: awk: ulovlig feltet $ (), navn "i" input rekordstort antal 1, fil kilde linje nummer 1 Sidst redigeret af Baghera; 08-30-2007 på 03:45 PM.. |
|
||||
|
Jeg har løst problemet:
Code:
i="1"
j=$2
while [ "$j" -gt 0 ]
do
echo "$data" | awk -v k=$i '{sum+=$k} END {print sum/NR}'
i=$[$i+1]
j=$[$j-1]
done
Code:
data='cat myList | xargs -n $2' |
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|