|
|
|
|
Google Site
|
|||||||
| Forums | Registreer | Blog | Man Pages | Forum Regels | Links | Albums | Veelgestelde vragen | Gebruikers | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier. |
![]() |
|
|
Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|||
|
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 | ||
|
|
|
||||
|
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
} |
|
|||
|
Citaat:
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. |
|
|||
|
Goede code, vgersh. Ik denk dat je vergat te resetten tijd voor de lus. Citaat:
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
} |
|
|||
|
Citaat:
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 |
|
|
![]() |
| Bladwijzers |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|
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 |