Acties:
  • 0 Henk 'm!

  • dezejongeman
  • Registratie: Juli 2006
  • Laatst online: 08-09 19:20
Voor school hebben wij een opdracht om een Windows log met AWK aan te passen en deze vervolgens in een MSSQL database te plaatsen.
Hiervoor hebben we een 3 tal files gekregen van de log. De officieele log van windows, een .txt (tab separated) en een .csv (comma separated file) in al deze 3 staan de zelfde gegevens. Het leek ons dan het handigst om de .csv te bewerken omdat deze het makkelijks geïmporteerd kn worden in MSSQL.

nu heb ik al veel dingen geprobeerd maar onderstaande leek mij het beste maar werkt niet, en ik en mijn mede student collega's komen nu geen stap verder meer.

het enige wat er moet AWK moet gebeuren is dat er een 3 tal velden weg gehaald moeten worden !!!!.
voor het gemak wil ik het liefs de CSV aanpassen omdat deze het makkelijkst te importeren is.

wat doen wij verkeerd?
...@debian:~$ awk 'BEGIN {FS = ","}; {print $1, $2, $3, $4, $6, $9}' system-eventlog-300909.csv
hier komt het volgende resultaat uit
30-9-2009 11:02:19 BROWSER Information 8033 The browser has forced an election on network \Device\NetBT_Tcpip_{F128EF84-BFD2-42DA-B395-8D3119AAE48E} because a master browser was stopped.
30-9-2009 11:02:15 Dhcp Error 1000 Your computer has lost the lease to its IP address 192.168.192.17 on the Network Card with network address 000475D3B53F.
30-9-2009 11:02:15 Dhcp Warning 1003 "Your computer was not able to renew its address from the network (from the DHCP Server) for the Network Card with network address 000475D3B53F. The following error occurred:
emaphore timeout period has expired. . Your computer will continue to try and obtain an address on its own from the network address (DHCP) server."
30-9-2009 11:01:39 Dhcp Warning 1003 "Your computer was not able to renew its address from the network (from the DHCP Server) for the Network Card with network address 000475D3B53F. The following error occurred:
emaphore timeout period has expired. . Your compute
als ik alleen veld 1 print komen er meerdere meerdere velden op het scherm, met dezelfde opzet van de code, dat is dus wat er mis gaat.
awk 'BEGIN {FS=","}; {print $1}' system-eventlog-300909.csv

30-9-2009
The semaphore timeout period has expired. . Your computer will continue to try and obtain an address on its own from the network address (DHCP) server."
30-9-2009
The semaphore timeout period has expired. . Your computer will continue to try and obtain an address on its own from the network address (DHCP) server."
30-9-2009
hierbij een stukje van de csv in een text editor
30-9-2009,11:04:11,DnsApi,Warning,None,11164,N/A,MSDNAA,"The system failed to register host (A) resource records (RRs) for network adapter
with settings:

Adapter Name : {F128EF84-BFD2-42DA-B395-8D3119AAE48E}
Host Name : msdnaa
Primary Domain Suffix : ict.hen.nl
DNS server list :
145.76.6.32
Sent update to server : <?>
IP Address(es) :
192.168.192.17

The reason the system could not register these RRs was because either (a) the DNS server does not support the DNS dynamic update protocol, or (b) the authoritative zone for the specified DNS domain name does not accept dynamic updates.

To register the DNS host (A) resource records using the specific DNS domain name and IP addresses for this adapter, contact your DNS server or network systems administrator."
30-9-2009,11:02:19,BROWSER,Information,None,8033,N/A,MSDNAA,The browser has forced an election on network \Device\NetBT_Tcpip_{F128EF84-BFD2-42DA-B395-8D3119AAE48E} because a master browser was stopped.
30-9-2009,11:02:15,Dhcp,Error,None,1000,N/A,MSDNAA,Your computer has lost the lease to its IP address 192.168.192.17 on the Network Card with network address 000475D3B53F.
link naar het bestand beken in open office dus de uitlijning is wel goed

ik ben nog eens opzoek gegaan en ben er achter gekomen dat doormiddel van mijn code alle data in veld 1 wordt gezet, maar ik moet de veld opzet behouden maar alleen een 3 tal velden verwijderen.
screenshot excel

het probleem is inmiddels opgelost.

[ Voor 15% gewijzigd door dezejongeman op 02-06-2010 15:25 . Reden: info toevoegen ]


Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Nu online
Goed, dit gaat je misschien niet veel helpen, maar:
  • Onduidelijke vraagstelling: Je geeft een voorbeeld inputfile, het commando wat je er op los laat en - onhandig! - de output die niet bij de inputfile past. Zo kunnen we dus al niet jouw probleem reproduceren.
  • Tevens ben je niet echt duidelijk in wat er uit moet komen:
    het enige wat er moet AWK moet gebeuren is dat er een 3 tal velden uit gehaald moeten worden.
    ... maar:
    awk 'BEGIN {FS = ","}; {print $1, $2, $3, $4, $6, $9}' system-eventlog-300909.csv
    suggereert dat er *6* velden geprint moeten worden. Wat wil je nou? Nog handiger is het als je een voorbeeld inputfile, gewenste output en resulterende (foute) output geeft. Probeer het ons eens makkelijk te maken!
  • Check eens of je inputfile niet per ongeluk een windows-type textfile is (dus carriage-return + newline als regeleinde, in plaats van alleen newline). Ik heb nare ervaringen met het processen van windows-type textfiles. Valt wel te fixen, maar kan even duren voor je het door hebt.
  • Het stukje CSV wat je geeft: klopt het dat elke 'record' verdeeld is over meerdere regels?
  • Zo ja, dan kan dat wel eens de oorzaak van de problemen zijn: AWK is nogal linebased. De 'FS' wordt gebruikt om een regel te splitten in velden, dus met jouw FS wordt de ',' gebruikt om te bepalen waar het ene veld eindigt en het volgende begint. En dat gaat dus niet over regeleindes heen (immers, hoe zou AWK dan weten waar een record eindigt of begint?)

Acties:
  • 0 Henk 'm!

  • jschot
  • Registratie: Oktober 2002
  • Laatst online: 09-07 09:46
Ik sluit me aan bij vanaalten, hier nog twee tips die je hopelijk helpen.
  • Het lijkt erop dat je meer dan een oneliner nodig hebt. In dat geval is het overzichtelijker om je awkcode in een apart bestand te zetten en aan te roepen met awk -f code.awk inputfile.
  • Ga er niet per definitie van uit dat de csv makkelijker te bewerken is dan de tabgescheiden txt.
Tot slot een kleine nuancering:
vanaalten schreef op dinsdag 01 juni 2010 @ 21:41:
Zo ja, dan kan dat wel eens de oorzaak van de problemen zijn: AWK is nogal linebased. De 'FS' wordt gebruikt om een regel te splitten in velden, dus met jouw FS wordt de ',' gebruikt om te bepalen waar het ene veld eindigt en het volgende begint. En dat gaat dus niet over regeleindes heen (immers, hoe zou AWK dan weten waar een record eindigt of begint?)
awk is record based. Standaard worden records gescheiden door regeleindes (en velden door witruimte) en heb je gelijk, maar je kan dit prima aanpassen dmv de variabele RS (record separator). Maar het probleem van de topicstarter lijkt me inderdaad dat de record separator ook voorkomt binnen de velden zelf.

Acties:
  • 0 Henk 'm!

  • Japius
  • Registratie: April 2003
  • Laatst online: 30-08 20:57
Je zegt dat je ook een tab-separated file hebt.
code:
1
awk -F "\t" '{print $3}'

geeft de inhoud van de derde kolom terug. De optie -F geeft de mogelijkheid om een separator op te geven en die staat op deze manier ingesteld als een tab (\t).

Acties:
  • 0 Henk 'm!

  • Predator
  • Registratie: Januari 2001
  • Laatst online: 12:27

Predator

Suffers from split brain

dat er een 3 tal velden uit gehaald moeten worden
Volgens mij wil hij juist 6 velden wel printen, en 3 niet

Maar euh, dat werkt toch met jouw commando :?
Je krijgt toch wel veld 1,2,3,4,6 en 9 als ik goed kan tellen ?

Wat moet je wel krijgen als output ? Geef dan eens een lijn van wat je wel als output wilt zien.

[ Voor 3% gewijzigd door Predator op 02-06-2010 09:45 ]

Everybody lies | BFD rocks ! | PC-specs


Acties:
  • 0 Henk 'm!

  • stevenh
  • Registratie: Maart 2005
  • Laatst online: 14-09 09:58
het is idd erg vreemd waarom alles in veld 1 terecht komt waarschijnlijk gaat er iets mis met je field separator.

Acties:
  • 0 Henk 'm!

  • rico_fxp
  • Registratie: Juli 2001
  • Laatst online: 06-10 21:05
Volgens mij is het probleem dat je niet tussen je output een comma print. Na de uitvoer van je AWK commando staan alle velden met een spatie gescheiden ipv comma.

Tevens moet je rekening houden dat AWK line based werkt:
dus

A,B,C,D,"Deze
Regel zou op 1 lijn moeten zitten",E,F,G

bij het printen van $1 met FS="," krijg je dus als output:
A
Regel zou op 1 lijn moeten zitten"

Je moet dus iets slims verzinnen wat veld $9 (welke meer regels bevat zover al sik kan zien) anders behandeld dan de rest.

[ Voor 52% gewijzigd door rico_fxp op 02-06-2010 12:42 ]

Pagina: 1