Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Husqvik 09. 05. 2013, 09:07:30
-
Ahoj,
potreboval bych radu ohledne slouceni dat z vice souboru. Mam udelany skript, ktery kazdou hodinu pomoci SNMP sesbira udaje ze zarizeni (teplotu) a ulozi to do souboru. Struktura vysledneho souboru je nasledujici:
Zarizeni_1 38
Zarizeni_2 39
Zarizeni_3 45
A ted bych potreboval jak tyto sesbirane hodnoty za jeden den nasypat do jednoho souboru. Aby byl vysledek tento:
Zarizeni_1 38 37 38 39.....
Zarizeni_2 39 41 38 46.....
Zarizeni_3 45 44 49 46....
Zkousel jsem prikaz join, ale ten umi jenom sloucit jen dva soubory. Resp. nepodarilo se mi ho presvedcit fungovat spravne - ve vyslednem souboru jsem mel vzdy jenom dve hodnoty (z prvniho a posledniho souboru). Nenakopnul by me nekdo spravnym smerem - idealne v awk, v tom se neco malo (spis hodne malo :P) orientuju.
Diky moc.
Husqvik
-
zkusil bych awk, ala tady http://stackoverflow.com/questions/5467690/how-to-merge-two-files-using-awk
otázka je, jak funguje těch víc hodinových(?) souborů - jestli vždy existují nebo některý soubor/řádek v něm může chybět. pokud vždy všechny existují, stačí všechny napřed ve správném pořadí sloučit do jednoho :-)
-
Jak říká Alfi - pokud mají soubory pevný formát, kterému se dá věřit, pak prvně ze všech extrahovat ten druhý sloupec a sloučit třeba pomocí http://linux.die.net/man/1/paste
Pokud ne, tak se nějakému tomu pythonu, perlu apod. nevyhneš. Bude to strašlivá námaha tak na deset řádků :)
-
Jop, a pokud si to chces do budoucna vylepsit, tak to laduj do databaze.
-
Jop, a pokud si to chces do budoucna vylepsit, tak to laduj do databaze.
Ovšem fklaudu!
-
Primluvil bych se za db rovnou, je to napsane hned a lepe se s tim pracuje.
-
Dekuji vsem za tipy. Databazi vylucuju, zadnou tam nemam a vzhledem k tomu, ze to potrebuju jenom docasne, tak je to zbytecne.
Zkusim to AWK a uvidime - snad z toho neco dostanu :-)
Jeste jedno diky.
Husqvik
-
"... Databazi vylucuju, zadnou tam nemam..."
Operační systém, který zná awk a neobsahuje ani jedinou databázi - to existuje?
-
Je to sice trochu divoké, ale co takhle:
eval "cat `ls -xrt *.txt | sed 's/ / | join - /g'`"
Předpokláda to, že soubory mají příponu txt a teploty se řadí podle času.
-
Dekuji vsem za tipy. Databazi vylucuju, zadnou tam nemam a vzhledem k tomu, ze to potrebuju jenom docasne, tak je to zbytecne.
Zkusim to AWK a uvidime - snad z toho neco dostanu :-)
Jeste jedno diky.
Husqvik
Mno ... ne ze by to nebylo mozny, ale dovolim si tvrdit, ze tam na 99,9999% databazi mas. Rek bych, ze SQLite urcite.
-
co treba:
#!/usr/bin/env ruby
hash = Hash.new { |hash, key| hash[key] = Array.new; }
while line = gets
split = line.split(' ')
key = split[0]
val = split[1]
hash[key] << val
end
hash.each_key do |key|
puts key + ' ' + hash[key].join(' ')
end
a pouziti:
$ cat *.txt | ./script.rb
-
Nebylo by lepší upravit ten skript, který ti ty soubory generuje?
-
rrdtool
-
na root.cz nikto nepouziva shell? to su mi veci...
cut -d ' ' -f 2 t2.txt | paste t1.txt -
-
na root.cz nikto nepouziva shell? to su mi veci...
Spíš sis nepřečetl předchozí odpovědi, ne?
-
Zdravim,
na shell script viz. prispevek vyse nemam, ale v awk jsem neco "sesmolil". Dodelej dle potreby, ale jinak je to funkcni i bez uprav.
BEGIN {
x = 1
y = 0
FS = " "
soubor = ""
}
{
if(soubor != FILENAME) {
soubor = FILENAME
x = 1
y++
}
tag = $1
pole1[tag] = tag
pole2[tag,y] = $2
x++
}
END {
for(p in pole1) {
printf("%s", p)
for(i = 1; i < x; i++) {
printf(" %s", pole2[p,i])
}
print ""
}
}
Upravuj a uzivej dle libosti. :)