Kezdőoldal » Számítástechnika » Programozás » Bash script feladat? (Bővebben...

Bash script feladat? (Bővebben lent)

Figyelt kérdés

Adott egy adat.dat fájl, amiben lakásokról tárolunk különböző infókat. Ezek az infók ;-vel elválasztva vannak eltárolva ilyen sorrendben: melyik kerületben van, területe, ára, jellemzői.


16;135;69;hangszigetelő falak, erkély, garázs

13;78;44;tégla, garázs, erkély, emeletes

12;780;1280;panorámás kilátás, garázs, emeletes

23;100;25;kert, bútorozatlan, riasztórendszer

3;123;99;4 szoba, emeletes, garázs, bútorozott

16;97;60;erkély, riasztórendszer, bútorozott


Itt most a 4. mezővel kell foglalkozni. Azt kéne megcsinálnom, hogy a programot a -k kapcsolóval indítva, és utána egymás után beírva a tetszőleges számú keresett jellemzőket kiszűrje az adott jellemzőkkel rendelkező lakásokat az adat.dat fájlból. Tehát ha pl. úgy futtattom a programot, hogy bash lakas.sh -k garázs emeletes, akkor a következő eredményt adja vissza:


13;78;44;tégla, garázs, erkély, emeletes

12;780;1280;panorámás kilátás, garázs, emeletes

3;123;99;4 szoba, emeletes, garázs, bútorozott


Awk-kal próbálom megcsinálni, odáig el is jutottam, hogy a -k kapcsoló utáni első szóra helyesen működik a program, de nem tudom, hogy hogy lehetne tetszőleges számú keresőszóra megcsinálni. Eddig így néz ki a kód:


if test "$1" = "-k"

then awk -v szo="$2" 'BEGIN{FS=";"} {if ($4 ~ szo) {print $0}}' adat.dat;

exit 1;

fi


Próbáltam a "$2" regex-t helyettesíteni a "${@:2}"-vel, de sajnos ez nem vált be. Valaki esetleg segítene nekem a megoldásban? Nagyon megköszönném.


2018. nov. 16. 15:48
 1/6 anonim ***** válasza:
Nem vagyok bash guru, de biztos, hogy = jel a jó és nem a ==?
2018. nov. 16. 17:07
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Ezt eddig nem nagyon néztem, most leteszteltem, és ahogy látom elfogadja mindkettőt a bash szintaxisa.
2018. nov. 16. 17:27
 3/6 A kérdező kommentje:

Megcsináltam közben. Ha valaki esetleg hasonlóval küzd, bemásolom a megoldásomat:

if test "$1" = "-k"

then awk -v szo="${*:2}" 'BEGIN{FS=";"} {n=split(szo,ks," ")} {for(i=1;i<=n;i++) if($4!~ks[i]) next}1' adat.dat;

exit 1;

fi

2018. nov. 16. 22:13
 4/6 anonim ***** válasza:
Hol kell ilyennel szívni, melyik suli?
2018. nov. 16. 22:29
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
Javasolni akartam éppen, hogy splittel -d tömbbe, de mint írtam nem vagyok bash guru, és nem láttam,hogy ha tömbbe rakod, akkor hogyan tovább, de te ügyesen megtaláltad az egyik verziót, lehet még regexxel is ment volna ciklus helyett.
2018. nov. 18. 09:21
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
Vagy az a tilde, az pont regex?:)
2018. nov. 18. 09:39
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!