Tema: Re: get info from txt file
Autorius: Laimis
Data: 2013-11-20 00:34:15
CurrentUser rašė:
> Čia ir yra tokių kaip aš bėda. kaip sakydavo senelis "devyni amatai -
> dešimtas badas". Aš savo gyvenime tiek dalykų esu kandęs, kad pačiam
> būtų sunku patikėti. Visko vis tiek neapžiosi. Aišku, tai ką tikiesi

Būtų gerai, jei vienas iš tų devynių amatų būtų gebėjimas mokytis; tada 
bado tikrai nebūtų... :-)
O ši patarlė jau kiek praranda aktualumą. Nes nūdieną, įvairiausių 
technologijų sūkuryje, reikia ne apžioti, o efektyviai pritaikyti ir 
pasinaudoti.
Taip, daugelyje dalykų tenka slysti paviršiumi, išmanyti labai 
paviršutiniškai, tačiau pramokęs/suvokęs/atsiminęs principus, gebėsi ir 
pritaikyti (kaip ir pasigilinti, kai prireiks).
Aš awk irgi gerai nemoku. Atsimenu, kaip jis veikia: skaito nuosekliai 
po eilutę (records), skaidydamas tekstą į laukus (fields). Kas skiria 
laukus ir eilutes galima nustatyti ir keisti. Taip pat sulyg kiekviena 
eilute tikrinamos sąlygos ir jei jos patenkinamos — vykdomas sąlygų 
kodas. Turi aibę matematinių ir tekstinių funkcijų, regexp.
Viskas: daugmaž tiek žinių man pakanka išspręsti tavo uždavinį 
pakankamai greitai.



> finale tikslas būtų toks kaip attchm. Bet ten dar yra daugiau teksto,
> kuris neatrodo vien stulpeliuose, todėl ir maniau, kad vienas nekintamas

Tai gana paprasta (su komentarais):

BEGIN {
	# Šis BEGIN blokas vykdomas prieš skaitant failą.
	# Kol kas nustatome, kad po kiekvieno print nedėliotų newline
	# ORS — output record separator
	ORS = ""
}

## Sąlygų blokai ##

# Regular expression sąlyga, nors galima parašyti ir taip:
# ($1 == "Date:" || $1 = "Time:") { ... }
$1 ~ /Date:|Time:/ {
	# išvedame datą arba laiką su kabliataškiu
	print $2 ";"
}


# Penki stulpeliai eilutėje (tik eilutės su temperatūra) ir žyma
# (pirmas stulpelis) prasideda raide E, o po to seka skaičius.
# Suprantama, čia gali tekti koreguoti, taikyti kompleksiškesnes
# sąlygas, jei failo formatas keičiasi, gali būti įvairesnis

NF >= 5 && $1 ~ /E[0-9]+/ {
	# išvedame trečią ir ketvirtą stulpelius
	print $3 ";" $4 ";"
}


# blokas be sąlygos (vykdomas kiekvienai perskaitytai eilutei)
{
	# jis tuščias	
}


END {
	# šis END blokas vykdomas perskaičius failą
}

Vualia:
 > cat report.txt | iconv -f utf-16 -t utf-8 | gawk -f parse.awk

11/19/13;06:24;195.0;195.0;185.0;185.3;175.0;175.2;165.0;164.9;

Tai — praktiškai pilnavertis CSV, kurį gali importuoti (galima ir 
stulpelius: Data, Laikas, E1 ... pradžioje pridėti) į excel'į (Data -> 
Import External Data). Arba jau tikrai turėtum susigaudyti, kaip tokį 
failą VBA išnarstyti ir į celes surašyti:

arr = Split(line, ";")
<...>



3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser