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, ";")
<...>