The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



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

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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 08-30-2007
Baghera baghera is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 23
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
#############################
  #2 (permalink)  
Old 08-30-2007
ranj @ chn ranj@chn is offline Forum Advisor  
Leger med Ubuntu Now!
  
 

Join Date: oktober 2005
Sted: Chennai
Posts: 365
vil dette arbejde?

Code:
awk -f temp.awk tempfile
hvor temp.awk er
Code:
{ for(i=1;i<=NF;i++) { sum[i]+=$i } }
END { for (i in sum) {printf("%f\t", sum[i]/NR) } }
Citat:
BTW, anden kolonne bør ikke 6,5, men 4,33

Sidst redigeret af ranj @ chn; 08-30-2007 på 11:41 AM.. Årsag: tilføje kommentarer
  #3 (permalink)  
Old 08-30-2007
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Beliggenhed: Boston, MA
Indlæg: 5.128
Citat:
Oprindeligt Indsendt af ranj @ chn View Post
Code:
awk -f temp.awk tempfile
hvor temp.awk er
Code:
{ for(i=1;i<=NF;i++) { sum[i]+=$i } }
END { for (i in sum) {printf("%f\t", sum[i]/NR) } }
ranj,
når iteration gennem en række "summen" med indekset for »i«, rækkefølgen af iteration er indeterminant, dvs ikke antage, at »i« vil gå fra'1 'til' NF '.
  #4 (permalink)  
Old 08-30-2007
ranj @ chn ranj@chn is offline Forum Advisor  
Leger med Ubuntu Now!
  
 

Join Date: oktober 2005
Sted: Chennai
Posts: 365
Smile I sidste ende?

Jeg gjorde ikke vide det. Så du mener, de værdier kunne være trykt i vilkårlig rækkefølge? Vil holde det i tankerne!
  #5 (permalink)  
Old 08-30-2007
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Beliggenhed: Boston, MA
Indlæg: 5.128
Citat:
Oprindeligt Indsendt af Baghera View Post
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
#############################
Baghera,
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.
  #6 (permalink)  
Old 08-30-2007
Baghera baghera is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 23
Citat:
Oprindeligt Indsendt af vgersh99 View Post
Baghera,
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.
Forskellen mellem nu og da er, at jeg har brug for det at være et bash / Bourne script. Den tidligere tråd, blev for et awk-program. Men jeg var nødt til at ændre det for at være et bash / Bourne shell script. At være ærlig, jeg kender ikke forskel virkelig, men jeg fik nogle uggly ser fra min ven, da jeg viste ham awk-program, som nogle af jer hjalp mig med. Så jeg vendte tilbage til Bourne / bash.

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..
  #7 (permalink)  
Old 08-31-2007
Baghera baghera is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 23
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
Det fungerer fint for mig. Og for at få de kolonner jeg bare bruge:

Code:
data='cat myList | xargs -n $2'
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 09:02 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0