![]() |
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | 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. |
Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
|
||||
| Draad | Thread Starter | Forum | Antwoorden | Last Post |
| Het toevoegen van kolommen van twee bestanden | chandra321 | Programmeren en Shell Scripting | 7 | 05-06-2009 01:11 PM |
| Vergelijking van soortgelijke kolommen in twee verschillende bestanden | ragavhere | Programmeren en Shell Scripting | 13 | 04-16-2008 09:53 |
| Vergelijking van de gemeenschappelijke kolommen van een tabel in twee bestanden | ragavhere | SUN Solaris | 1 | 04-11-2008 09:41 |
| Kolommen vergelijken van twee bestanden | ggopal | Programmeren en Shell Scripting | 4 | 02-21-2007 08:06 PM |
| Kolommen vergelijken van twee bestanden | ggopal | UNIX for Advanced & Expert Gebruikers | 1 | 02-17-2007 04:11 |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
||||
|
het vergelijken van bestanden - toevoeging / aftrekken / kolommen opmaken
Ik heb twee bestanden:
file1.txt: FS Totaal FTA Gebruikt gebruikt% / U01 10000 8000 2000 80% / U02 10000 8000 2000 80% / U03 10000 8000 2000 80% / U04 10000 8000 2000 80% / u05 10000 8000 2000 80% / u06 10000 8000 2000 80% / u07 10000 8000 2000 80% / U10 10000 5000 5000 50% file2.txt: FS Adj / U01 1500 / u05 500 / U10 2500 Ik wil ze te vergelijken met de eerste kolom in elk bestand en een output van beide dat eruit ziet als het volgende te maken: FS totaal gebruikte + Adj Free-Adj (Gebruikt + Adj) / Totaal -------- --------- --------- --------- --------- / U01 10.000 9.500 500 95% / U02 10.000 8.000 2.000 80% / U03 10.000 8.000 2.000 80% / U04 10.000 8.000 2.000 80% / u05 10.000 8.500 1.500 85% / u06 10.000 8.000 2.000 80% / u07 10.000 7.500 2.500 75% Let op dat alle lijnen van file1.txt zijn vermeld, en de kolom "ADJ" van bestand2.txt wordt toegevoegd aan de kolom "Gebruikt" en afgetrokken van de kolom "Free" van file1.txt alleen als er een wedstrijd. Ik was in staat om dit verslag alleen te produceren na het laden van deze bestanden in een database, maar ik weet zeker dat ik het kan met behulp van shell scripting met uw hulp. Bedankt, Omer |
|
||||
|
Dank u, radoulov, voor uw snelle en elegent script. Het werkt perfect.
Alles wat ik nu moet doen is de indeling van het verslag mooi dus het is beter leesbaar, maar ik denk dat ik kan dat uit figuur. Appreciate it Omer |
|
|||||
|
Zeker. Code:
NR == FNR De bovenstaande formule geeft waar alleen tijdens het verwerken van de eerste ingang bestand (file2). Dus, de bijbehorende maatregelen zijn: Code:
{
sub(/,/, "")
_[$1] = $2
next
}
Strip de duizenden afscheider, bevolken een associatieve array _met $ 1 als sleutels $ 2 als waarden, dus gezien de input zal worden: Code:
key -> "/u01" value -> 1500 key -> "/u05" value -> 500 key -> "/u10" value -> 2500 De volgende verklaring krachten awk om te stoppen met de verwerking van de huidige record dus geen verdere regels / acties zullen worden uitgevoerd dit record. Dit betekent dat de volgende acties niet zal de eerste input file proces. Code:
FNR == 1 FNR is het aantal records die zijn zo ver van de huidige ingang bestand te lezen (de tweede input bestand in dit geval). Dus, terwijl de verwerking van de eerste record van de tweede input file: Code:
{
printf "%4s %5s %8s %8s %14s\n",
"FS", "Total", "Used+Adj", "Free-Adj", "(Used+Adj)/Total"
while (++i < 46) printf "-"
print ""
next
}
Print de header kolommen en ga naar de volgende record. Code:
$1 in _ {
$3 += _[$1]
$4 -= _[$1]
$5 = $3/$2*100
}
De uitdrukking toets array Geeft TRUE terug als de aangegeven sleutel bestaat in de aangegeven array. Voor deze registers het volgende doen: - Voeg de waarde _ [$ 1] van de desbetreffende toets $ 1 de derde kolom - Aftrekken van de waarde _ [$ 1] van de desbetreffende toets $ 1 de vierde kolom - Berekening van de waarde van de vijfde kolom Code:
{
printf "%4s %5d %8d %8d %14d%\n",
$1, $2, $3, $4, $5
}
Druk de nieuwe waarden. Hoop dat dit helpt. |
|
||||
|
SIMPLY SUPERB! NO WORDSSSSSSSS volstaat uw manier van
Uitleg. Bundels van dank van diepst van mijn HEART.Let mij zeggen te begrijpen is somthing en uit te leggen in de eenvoud die meer cumbersome.Once weer Thanx. Cheers Dimitri. |
|
||||
|
Net nu ik geschreven heb, maar het antwoord lijkt over geen enkele waar,
Geachte Radlouv Bundels van dank aan u voor het uitleggen van de code in zeer eenvoudige termijn. No way, maar gewoon SUPERB. Geen woord zal volstaan. Weten is iets maar om uit te leggen in eenvoudige wrods vereist grote insite. Thanx nogmaals. Cheers Up. |
![]() |
| Bladwijzers |
| Labels |
| solaris |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|