Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
Google Site



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-13-2005
Geregistreerde gebruiker
 

Join Date: juli 2005
Posts: 61
Tijd manipulaties

Hi All
Ik heb een lange bestandsnamen met verschillende terreinen, zoals: --
uu: mm: ss seconden
14:15:56 120
14:18:36 12
15:12:36 1500
Ik wil aftrekken van de uu: mm: ss in lijn (2) uit uu: mm: ss in lijn (1) en vergelijken van de output van aftrekken (verkregen in seconden) met de seconden in de lijn (1) en de echo of het meer dan seconde (120). Ik wil het proces te herhalen voor het gehele bestand in Excel te kopiëren we de formule van de kolom. Ik probeerde het commando
nawk '(printf (substr ($ 0,1,2 )...........}' het scheiden van de uu: mm: ss als
14 15 56 120
14 18 36 12
15 12 36 1500
vervolgens met behulp van commando
nawk '(print ($ 1 * 3600 + $ 2 * 60 + $ 3)-prev; vorige \u003d ($ 1 * 3600 + $ 2 * 60 + $ 3))' <file>
Ik heb het resultaat is het resultaat:
51356
160
3240, alle waarde in seconden.
Het probleem is dat ik niet in staat ben om de 160 seconden te vergelijken met 120 sec en aansluiten bij de result & loop van het proces dus te vergelijken met 3240 sec 12 sec en ga zo maar door.
Kunt u me helpen.
Thanks in advance.
Sponsored Links
  #2 (permalink)  
Old 07-13-2005
blowtorch's Avatar
AFK
 

Join Date: december 2004
Locatie: Singapore
Berichten: 2351
Heb je liever een rotonde script om de klus te klaren:


Code:
#!/bin/sh
#set -x
line=`head -1 test.tmp`
sec1=`echo $line | cut -d' ' -f2`
hms1=`echo $line | cut -d' ' -f1|awk -F':' '{print $1*3600+$2*60+$3}'`
tail +2 test.tmp | while read line; do
        sec2=`echo $line | cut -d' ' -f2`
        hms2=`echo $line | cut -d' ' -f1|awk -F':' '{print $1*3600+$2*60+$3}'`
        secint=`expr $sec1 - $sec2`
        if [ $hms1 -gt $secint ]; then
                echo "hh:mm:ss subtraction is greater than seconds"
        else
                echo "hh:mm:ss subtraction is less than / equal to seconds"
        fi
        sec1=$sec2; hms1=$hms2
done

test.tmp is het bestand dat de gegevens bevat. Er wordt verondersteld aanwezig te zijn in dezelfde map als het script.

Ik ben er zeker van dat er een of andere manier in gawk dat je dit zou kunnen doen in minder dan de helft van het aantal regels. Maar helaas, mijn kennis van awk laat veel te wensen over.

Laatst gewijzigd door steekvlam; op 07.13.2005 04:07 PM..
  #3 (permalink)  
Old 07-13-2005
vgersh99's Avatar
Moderator
 

Join Date: Feb 2005
Locatie: Boston, MA
Berichten: 5.199
hier is het awk manier:

nawk-f vana.awk myFile.txt

vana.awk:

Code:
BEGIN {
  FStime=":"
  multN=split("3600 60 1", mult, " ");
}
{
  n=split($1, timeA, FStime)
  for(i=1; i <= n; i++)
   time += timeA[i] * mult[i]
  diff = $2
}
FNR == 1 {
  prevTime=time;
  prevDiff=diff
  next;
}
{
  printf("%s\n", ( ( time - prevTime) > prevDiff ) ? "greater" : "notGreater")
  prevTime=time; prevDiff=diff
}

  #4 (permalink)  
Old 07-16-2005
Geregistreerde gebruiker
 

Join Date: juli 2005
Posts: 61
Citaat:
Oorspronkelijk geplaatst door steekvlam
Heb je liever een rotonde script om de klus te klaren:


Code:
#!/bin/sh
#set -x
line=`head -1 test.tmp`
sec1=`echo $line | cut -d' ' -f2`
hms1=`echo $line | cut -d' ' -f1|awk -F':' '{print $1*3600+$2*60+$3}'`
tail +2 test.tmp | while read line; do
        sec2=`echo $line | cut -d' ' -f2`
        hms2=`echo $line | cut -d' ' -f1|awk -F':' '{print $1*3600+$2*60+$3}'`
        secint=`expr $sec1 - $sec2`
        if [ $hms1 -gt $secint ]; then
                echo "hh:mm:ss subtraction is greater than seconds"
        else
                echo "hh:mm:ss subtraction is less than / equal to seconds"
        fi
        sec1=$sec2; hms1=$hms2
done

test.tmp is het bestand dat de gegevens bevat. Er wordt verondersteld aanwezig te zijn in dezelfde map als het script.

Ik ben er zeker van dat er een of andere manier in gawk dat je dit zou kunnen doen in minder dan de helft van het aantal regels. Maar helaas, mijn kennis van awk laat veel te wensen over.
Hi vriend
Bedankt voor het antwoord
Ik probeerde het script en die verandert al naar gelang mijn behoefte het kader van:
lijn \u003d `head -1 test.tmp"
Sec1 \u003d `echo $ line | cut-d ''-f5`
hms1 \u003d `echo $ line | cut-d ''-f4 | awk-F ':' (print $ 1 * 3600 + $ 2 * 60 + $ 3) '`
staart +2 test.tmp | while read line; doen
sec2 \u003d `echo $ line | cut-d ''-f5`
hms2 \u003d `echo $ line | cut-d ''-f4 | awk-F ':' (print $ 1 * 3600 + $ 2 * 60 + $ 3) '`
secint \u003d `expr $ hms2 - $ hms1"
if [$ secint-gt $ Sec1], vandaar
awk '(print $ 0, "pk")'
anders
awk '(print $ 0, "W")'
fi
Sec1 \u003d $ sec2; hms1 \u003d $ hms2
gedaan

maar het geeft een aantal problemen
1) Het is niet de productie van de eerste twee regels. Rest van de lijnen zijn bedrukt met elke vergelijking gemaakt (misschien net niet goed werkt)
2) Rest van de lijn gedrukt weerspiegelen de vergelijking gemaakt voor de eerste twee regels.
bijvoorbeeld alle lijnen ofwel bevat het karakter pk of W.
Please Help.
  #5 (permalink)  
Old 07-16-2005
Geregistreerde gebruiker
 

Join Date: juli 2005
Posts: 137
Thumbs up

Goede code, vgersh. Ik denk dat je vergat te resetten tijd voor de lus.
Citaat:
Oorspronkelijk geplaatst door vgersh99

Code:
{
  n=split($1, timeA, FStime)
  time = 0
  for(i=1; i <= n; i++)
   time += timeA[i] * mult[i]
  diff = $2
}

Uw code is zo mooi, ik kon de verleiding niet weerstaan ontdaan.

Code:
BEGIN {
  split("3600 60 1", mult)
  FS=":| "
}
{ time = 0
  for (i=1; i < 4; i++)
    time += $i * mult[i]
  diff = $4
}
FNR == 1 {
  prevTime = time
  prevDiff = diff
  next
}
{ print ( ( time - prevTime) > prevDiff ) ? "greater" : "notGreater"
  prevTime=time; prevDiff=diff
}

  #6 (permalink)  
Old 07-16-2005
vgersh99's Avatar
Moderator
 

Join Date: Feb 2005
Locatie: Boston, MA
Berichten: 5.199
Citaat:
Oorspronkelijk geplaatst door futurelet
Goede code, vgersh. Ik denk dat je vergat te resetten tijd voor de lus.
goede vangst - thanks.

Welkom bij unix.com, futurelet - blij om hier te zien!
  #7 (permalink)  
Old 07-19-2005
Geregistreerde gebruiker
 

Join Date: juli 2005
Posts: 61
Citaat:
Oorspronkelijk geplaatst door vanand420
Hi All
Ik heb een lange bestandsnamen met verschillende terreinen, zoals: --
uu: mm: ss seconden
14:15:56 120
14:18:36 12
15:12:36 1500
Ik wil aftrekken van de uu: mm: ss in lijn (2) uit uu: mm: ss in lijn (1) en vergelijken van de output van aftrekken (verkregen in seconden) met de seconden in de lijn (1) en de echo of het meer dan seconde (120). Ik wil het proces te herhalen voor het gehele bestand in Excel te kopiëren we de formule van de kolom. Ik probeerde het commando
nawk '(printf (substr ($ 0,1,2 )...........}' het scheiden van de uu: mm: ss als
14 15 56 120
14 18 36 12
15 12 36 1500
vervolgens met behulp van commando
nawk '(print ($ 1 * 3600 + $ 2 * 60 + $ 3)-prev; vorige \u003d ($ 1 * 3600 + $ 2 * 60 + $ 3))' <file>
Ik heb het resultaat is het resultaat:
51356
160
3240, alle waarde in seconden.
Het probleem is dat ik niet in staat ben om de 160 seconden te vergelijken met 120 sec en aansluiten bij de result & loop van het proces dus te vergelijken met 3240 sec 12 sec en ga zo maar door.
Kunt u me helpen.
Thanks in advance.


Hallo Vrienden
Bedankt voor het antwoord
Ik probeerde het script en die verandert al naar gelang mijn behoefte het kader van:
lijn \u003d `head -1 test.tmp"
Sec1 \u003d `echo $ line | cut-d ''-f5`
hms1 \u003d `echo $ line | cut-d ''-f4 | awk-F ':' (print $ 1 * 3600 + $ 2 * 60 + $ 3) '`
staart +2 test.tmp | while read line; doen
sec2 \u003d `echo $ line | cut-d ''-f5`
hms2 \u003d `echo $ line | cut-d ''-f4 | awk-F ':' (print $ 1 * 3600 + $ 2 * 60 + $ 3) '`
secint \u003d `expr $ hms2 - $ hms1"
if [$ secint-gt $ Sec1], vandaar
awk '(print $ 0, "pk")'
anders
awk '(print $ 0, "W")'
fi
Sec1 \u003d $ sec2; hms1 \u003d $ hms2
gedaan

maar het geeft een aantal problemen
1) Het is niet de productie van de eerste twee regels. Rest van de lijnen zijn bedrukt met elke vergelijking gemaakt (misschien net niet goed werkt)
2) Rest van de lijn gedrukt weerspiegelen de vergelijking gemaakt voor de eerste twee regels.
bijvoorbeeld alle lijnen ofwel bevat het karakter pk of W.
Gelieve corrigeren van fouten in script en help me out.
Sponsored Links
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Uit


Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Linux Going Big Time en Prime Time Tegen Windows, UNIX (WSJ) (Addict 3D) Linux Bot UNIX en Linux RSS Nieuws 0 06-21-2007 05:10 PM
Start tijd / eindtijd en de status van crontabtaak thambi Programmeren en Shell Scripting 3 05-16-2007 11:24
How To Geef Tijdsynchronisatie gebruiken NTS-150 Time Server op Unix-netwerk? pesty UNIX for Advanced & Expert Gebruikers 2 03-22-2007 02:20
Datum manipulaties rochitsharma UNIX for Advanced & Expert Gebruikers 2 09-07-2006 10:42 PM
datum manipulaties user1 Programmeren en Shell Scripting 2 07-20-2004 01:22 PM



Alle tijden zijn GMT -4. Het is nu 12:00.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De UNIX-en Linux Forums Copyright © 1993-2010. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0