číst data ze souboru a vložit do databáze pomocí bash nebo awk

hlasů
0

Jsem velmi nového v Bash a unix. Byl jsem přidělen úkol získávat údaje z protokolu s názvem errors.out, který používá oddělovač |. Zde je příklad dat:

1423544401 | video_load_time | 5.0.0.37 | i3 | 55.66.88.77 | 0.0 | RAT | Mike | 5656519 | 6549943438483 || album ||| N / A || 7149

Takže v podstatě data v pořadí je ohraničena |je následující:

   times
   eventKey
   appl
   devic
   devn
   sign
   ne
   State
   latude
   lde
   su
   buame
   tount
   assId
   eCode
   monitor
   duration

Musím počítat každý z eventkeys (video_load_time) a přidejte jejich celkové doby trvání. Pak musím vložit těchto dvou polí do databáze, které jsem vytvořil. Můj databáze obsahuje 2 pole counta totaldurationpod stolem counter. Má někdo nějaké nápady, co bych měl použít k dosažení tohoto cíle? Slyšel jsem, awknebo pythonby byla dobrá volba ..

Položena 11/02/2015 v 17:32
uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

S awk:

awk -F \| '{ duration[$2] += $NF } END { for(d in duration) { print d, duration[d] } }' errors.out

Zde $2je druhé pole v každém řádku a $NFposlední, takže to shrnuje trvání klíčem a vytiskne výsledky, když je dosaženo konce vstupu - poté, co vše je zpracováno.

EDIT: Chcete-li přidat čítač na to,

    awk -F \| '{ duration[$2] += $NF; ++counter[$2] } END { for(d in duration) { print d, counter[d], duration[d] } }' errors.out
Odpovězeno 11/02/2015 v 18:22
zdroj uživatelem

hlasů
0
awk -v FS="|" -v KEY="video_load_time" '$2==KEY{TOTAL+=$NF}END{print KEY,TOTAL}'  my_file

pro

-v KEY="video_load_time"

můžete změnit proměnnou klíčový řetězec na jinou hodnotu, než video_load_time

Odpovězeno 11/02/2015 v 19:58
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more