adamec

Linux2

May 10th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.63 KB | None | 0 0
  1. #----------------------------------------------------
  2. # 3 feladat - GREP/EGREP példák
  3. #----------------------------------------------------
  4.  
  5. # Készítsen futtatható bash szkriptet, amely végezze el az alábbi feladatokat az utána zárójelben lévő parancsok, megfelelő típusú regurális kifejezések használatával!
  6.  
  7. #1 Listázza azon személyek adatait, akik adott hónap 13.-a után születtek, és nem Dunaújvárosiak (egrep, extended regexp)! (2)
  8. egrep "[0-9]{4}\.[0-9]{2}\.(1[4-9]|[2-3][0-9])\." adat | egrep -v "Dunaújváros"
  9.  
  10. #2 Listázza az év középső négy hónapjában született urak nevét, születési idejét, lakóhelyét születési idő szerint csökkenő sorrendben (grep, basic regexp)! (3)
  11. grep ":úr:[0-9]\{4\}\.0[5-8]\.[0-9]\{2\}\." adat | cut -d ":" -f2,4,5 | sort -t ":" -nrk2
  12.  
  13. #1 Listázza azon személyek adatait, akik adott hónap 19.-e előtt születtek, és Budapestiek (grep, basic regexp)! (2)
  14. grep "[0-9]\{4\}\.[0-9]\{2\}\.\(0[0-9]\|1[0-8]\)\.,Budapest" adat
  15.  
  16. #2 Listázza az év utolsó negyedévében született hölgyek nevét, lakóhelyét, fizetését lakóhely szerint csökkenő sorrendben (egrep, extended regexp)! (3)
  17. egrep ",hölgy,[0-9]{4}\.(09|1[0-2])\.[0-9]{2}\." adat | cut -d "," -f2,5,6 | sort -t "," -rk2
  18.  
  19. # További hasonló példák (nem én dolgoztam ki)...
  20.  
  21. # Listázza azon urak adatait, akik keresztneve K-betűvel kezdődik, és nem Budapestiek (egrep, extended regexp)?
  22. egrep -v "Budapest" adat | egrep "\ K" | egrep ",úr,"
  23.  
  24. # Listázza az év harmadik negyedévében született hölgyek nevét, születési idejét, születési idő szerint csökkenő sorrendben (grep, basic regexp)?
  25. grep ",hölgy,[0-9]\{4\}\.0[789]\.[0-9]\{2\}\." adat | cut -d "," -f2,4 | sort -t "," -rk2 | tr "," "\t"
  26.  
  27. # Listázza azon urak adatait, akik adott hónap 15.-e előtt születtek, és nem Budapestiek (egrep, extended regexp)?
  28. egrep -v "Budapest" adat | egrep "úr,[0-9]{4}\.[0-9]{2}\.(0[0-9]|1[0-4])\." | tr "," "\t"
  29.  
  30. # Listázza az év első negyedévében született hölgyek nevét, születési idejét, fizetés szerint növekvő sorrendben (grep, basic regexp)?
  31. grep ",hölgy,[0-9]\{4\}\.0[123]\.[0-9]\{2\}\." adat | cut -d "," -f2,4,6 | sort -t "," -nk3 | tr "," "\t"
  32.  
  33. # Listázza azon hölgyek adatait, akik adott hónap 25.-e után születtek, és nem Budapestiek (egrep, extended regexp)?
  34. egrep -v "Budapest" adat | egrep ",hölgy,[0-9]{4}\.[0-9]{2}\.(2[6-9]|3[01])\."
  35.  
  36. # Listázza az év harmadik negyedévében született urak nevét, lakóhelyét, lakóhely szerint csökkenő sorrendben (grep, basic regexp)?
  37. grep ",úr,[0-9]\{4\}\.0[789]\.[0-9]\{2\}\." adat | cut -d "," -f 2,5 | sort -t "," -rk2
  38.  
  39. # Listázza azon hölgyek adatait, akik az adott hónap 12.-e előtt születtek és Dunaújvárosiak (grep, basic regexp)
  40. grep ':hölgy:[0-9]\{4\}\.[0-9]\{2\}\.\(0[1-9]\|1[01]\)\.' adat  | grep ":Dunaújváros:"
  41.  
  42. # Listázza az év utolsó negyedévében született urak nevét, lakóhelyét, lakóhely szerint növekvő sorrendben ( egrep, extended regexp )
  43. egrep ':úr:[0-9]{4}\.1[012]\.' adat | cut -d ":" -f2,5 | sort -t ":" -k2
  44.  
  45. # Listázza azon urak adatait, akik adott NEM hónap 15-e előtt születtek és nem is Budapestiek ( grep, basic regexp )
  46. grep -v "Budapest" adat | grep "úr;[0-9]\{4\}\.[0-9]\{2\}\.\(1[6-9]\|2[0-9]\|3[01]\)\."
  47.  
  48. # Listázza az év első negyedévében született hölgyek lakóhelyét, születési idejét, születési idő szerint csökkenő sorrendben.
  49. egrep 'hölgy:[0-9]{4}\.0[123]\.' adat | awk -F ":" '{print $5 ":" $4}' | sort -t ":" -k2
  50. # Megjegyzés: itt szerintem inkább cut-ot kellene használni.. Bár a feladat nem tiltja az awk-t sem!
  51.  
  52. #----------------------------------------------------
  53. # 4 feladat - SED példák
  54. #----------------------------------------------------
  55.  
  56. # Készítsen futtatható bash szkriptet (sed felhasználásával mindegyik részfeladatnál). A szkript végezze el a következőket egymástól függetlenül a bemeneti fájlon és az átalakítások eredményeit írja ki egymás után a standard kimenetre!
  57. # Megjegyzés: a feladat szövege alapján én a kimenetet átirányítottam a standard kimenetre (ami egyébként is az alapértelmezett). Nem hiszem, hogy szükséges, de így is értelmezhető és nem jelent hibát a működése során...
  58.  
  59. #1 Azon sorokban, ahol a sorszám 5-re végződik a hölgyek születési idejét és keresztnevét ne jelenítse meg. (2)
  60. sed -r '{/^[0-9]{3}5\.:[[:alpha:]]*[[:space:]][[:alpha:]]*:hölgy/ s/[[:space:]][[:alpha:]]*:hölgy:[0-9]{4}\.[0-9]{2}\.[0-9]{2}\.:/:hölgy:/}' adat >&1
  61.  
  62. #2 Az év első harmadában született urak esetében duplán jelenítse meg az adott sort. (2)
  63. sed -r '/:úr:[0-9]{4}\.0[1-4]\./ p' adat >&1
  64.  
  65. #3 A nem Budapesti urak esetében cserélje meg a név és a születési idő oszlopot. (3)
  66. sed -r '/Budapest/ ! {/:úr:/ s/([[:alpha:]]*[[:space:]][[:alpha:]]*):([[:alpha:]]*):([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.)/\3:\2:\1/}' adat >&1
  67.  
  68. #1 Csak egy adott hónap páros sorszámú napjain született hölgyek adatait listázza. (2)
  69. sed -nr '/,hölgy,[0-9]{4}\.[0-9]{2}\.[0-9][02468]\.,/ p' adat >&1
  70.  
  71. #2 Háromtól kezdve minden hatodik sor után szúrjon be egy üres sort. (2)
  72. #Megjegyzés: 3-tól kezdve = 3. sor után az első üres sor
  73. sed -r '4~6 i \\' adat adat >&1
  74.  
  75. #3 A Budapesti hölgyek esetében cserélje meg a sorszám és a születési idő oszlopot. (3)
  76. sed -r '/Budapest/ {/,hölgy,/ s/^([0-9]*\.),([[:alpha:]]*[[:space:]][[:alpha:]]*),([[:alpha:]]*),([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.)/\4,\2,\3,\1/}' adat >&1
  77.  
  78. # További hasonló példák (nem én dolgoztam ki)...
  79.  
  80. # Az év harmadik negyedévében született urak esetében háromszor jelenítse meg az adott sort.
  81. sed -r '/;úr;[0-9]{4}\.0[789]\.[0-9]{2}/ {p;p}' adat
  82. sed -r '/úr/ {/[0-9]{4}\.0[789]\.[0-9]{2}/ p; /[0-9]{4}\.0[789]\.[0-9]{2}/ p}' adat
  83.  
  84. # A páros sorszámú sorokban a hölgyek lakóhely és fizetés oszlopát ne jelenítse meg.
  85. sed -r '2~2 {/hölgy/ s/,[A-Z][[:alpha:]]*,[0-9]*$//}' adat
  86.  
  87. # A nem Dunaújvárosi urak esetében cserélje meg a lakóhely és a születési idő oszlopot.
  88. sed -r '/Dunaújváros/ ! {/úr/ s/([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.),([A-Z][[:alpha:]]*),([0-9]*)$/\2,\1,\3/}' adat
  89.  
  90. # Csak az év első negyedévében született hölgyek adatait listázza.
  91. sed -nr '/hölgy/ {/,[0-9]{4}\.0[123]\.[0-9]{2}\./ p}' adat
  92.  
  93. # Kettőtől kezdve minden harmadik sor elé szúrjon be egy üres sort.
  94. sed -r '2~3 a \\' adat # <-- Ez szebb megoldás
  95. sed -r '3~3 i \\' adat
  96.  
  97. # A Dunaújvárosi hölgyek esetében cserélje meg a születési idő és a lakóhely oszlopot.
  98. sed -r "/Dunaújváros/ {/hölgy/ s/([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.),([A-Z][[:alpha:]]*),([0-9]*)$/\2,\1,\3/}" adat
  99.  
  100. # Háromtól kezdve minden harmadik sor után szúrjon be egy üres sort.
  101. sed -r '3~3 a \\' adat
  102.  
  103. # Csak az év második negyedévében született hölgyek adatait listázza
  104. sed -nr '/hölgy:[0-9]{4}\.0[456]\./ p' adat
  105.  
  106. # A Budapesti hölgyek esetében cserélje meg a sorszám és a lakóhely oszlopot.
  107. sed -r '/:Budapest:/ {/hölgy/ s/^([0-9]*\.):([[:alpha:]]*[[:space:]][[:alpha:]]*):([[:alpha:]]*):([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.):([[:alpha:]]*)/\5:\2:\3:\4:\1/}' adat
  108.  
  109. # A páros sorszámú sorokban a hölgyek születési idő oszlopát kétszer egymás után vesszővel elválasztva, a lakóhely oszlopát ne jelenítse meg.
  110. sed -r '2~2 {/hölgy/ s/:([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.):([[:alpha:]]*)/:\1,\1/}' adat
  111.  
  112. # A nem Budapesti urak esetében duplán jelenítse meg az adott sor.
  113. sed -r '/Budapest/ ! {/:úr:/ p}' adat
  114.  
  115. # Adott hónap 22-e után született urak esetében cserélje meg a név és a fizetés oszlopot.
  116. sed -r '/:úr:[0-9]{4}\.[0-9]{2}\.(2[3-9]|3[01])\./ s/^([0-9]*\.):([[:alpha:]]*[[:space:]][[:alpha:]]*):([[:alpha:]]):([0-9]{4}\.[0-9]{2}\.[0-9]{2}\.):([[:alpha:]]*):([0-9]*)/\1\6\3\4\5\2/' adat
  117.  
  118. #----------------------------------------------------
  119. # 5 feladat - AWK példák
  120. #----------------------------------------------------
  121.  
  122. # Készítsen futtatható bash szkriptet, amely végezze az alábbi feladatokat az utána zárójelben lévő módon.
  123.  
  124. #1 Írja ki azon legidősebb 6 hölgy adatait, akinek a nevében nem szerepel sem a "K" sem az "s" betű, és 83000-nél nem keresnek kevesebbet! Az egyszerűség kedvéért feltételezzük, hogy különböző napokon születtek. (awk) (3)
  125. sort -t ":" -nk4 adat | awk -F ":" '($3=="hölgy") && ($2!~/[Ks]/) && ($6<=83000)' | head -n6
  126.  
  127. #2 Melyik városban lakik a legtöbb úr? Listázzuk az egyes városok neveit, és az ott lakó urak számát, darabszám szerint csökkenő sorrendben. (awk)
  128. sort -t ":" -k5 adat | awk -F ":" '($3=="úr") {print $5}' | uniq -c | awk -F " " '{print $2 ":" $1}' | sort -t ":" -nrk2
  129.  
  130. #1 Írja ki azon legfiatalabb 5 úr adatait, akinek a nevében szerepel a "B" de nem szerepel az "k" betű, és 96000-nél többet keresnek! Az egyszerűség kedvéért feltételezzük, hogy különböző napokon születtek. (awk) (3)
  131. sort -t "," -nrk4 adat | awk -F "," '($3=="úr") && ($2~/B/) && ($2!~/k/) && ($6>96000)' | head -n5
  132.  
  133. #2 Melyik napon született a legtöbb úr? Listázzuk az egyes napok sorszámát, és az akkor született urak számát, darabszám szerint növekvő sorrendben. (awk)
  134. awk -F "," '($3=="úr") {print $4}' adat | awk -F "." '{print $3}' | sort -n | uniq -c | awk -F " " '{print $2 "," $1}' | sort -t "," -nk2
  135.  
  136. # További hasonló példák (nem én dolgoztam ki)...
  137.  
  138. # Írja ki azon legidősebb 4 úr adatait, akinek a nevében nem szerepel sem a “T” sem a “p” betű, és 79000-nél nem keresnek többet! (awk felhasználásával)
  139. sort -t "," -k4 adat | awk -F "," '($3=="úr") && ($2!~/[Tp]/) && ($6<=79000)' | head -n4
  140.  
  141. # Melyik városban él a legtöbb úr? Listázzuk az egyes városok neveit, és az ott élő urak számát, darabszám szerint növekvő sorrendben. (awk felhasználásával)
  142. sort -t "," -k5 adat | awk -F "," '($3=="úr") {print $5}' | uniq -c | awk -F " " '{print $2 "," $1}' | sort -t "," -nk2 | tr "," "\t"
  143.  
  144. # Írja ki azon legfiatalabb 3 hölgy adatait, akinek a nevében szerepel a “P” és a “n” betű, és 90000-nél többet keresnek! (awk felhasználásával)
  145. sort -t "," -rk4 adat | awk -F "," '($3=="hölgy") && ($2~/[Pn]/) && ($6>90000)' | head -n3
  146.  
  147. # Hányadikán született a legtöbb úr? Listázzuk a hónapok egyes napjait, és az azon a napon született urak számát, darabszám szerint növekvő sorrendben. (awk felhasználásával)
  148. awk -F "," '($3=="úr") {print $4}' adat | awk -F "." '{print $3}' | sort | uniq -c | awk -F " " '{print $2 "," $1}' | sort -t "," -nk2 | tr "," "\t"
  149.  
  150. # Írja ki azon legfiatalabb 3 úr adatait, akinek a nevében szerepel a "B", de nem szerepel az "s" betű, és 93000-nél többet keresnek!
  151. sort -t ":" -rk4 adat | awk -F ":" '($3=="úr") && ($2~/[B]/) && ($2!~/[s]/) && ($6>93000)' | head -n3
  152.  
  153. # Melyik fizetés a leggyakoribb az urak körében? Listázzuk az egyes fizetéseket és az adott sösszeget kereső urak számát, darabszám szerint csökkenő sorrendben.
  154. sort -t ":" -nk6 adat | awk -F ":" '($3=="úr") {print $6}' | uniq -c | awk -F " " '{print $2 ":" $1}' | sort -t ":" -rnk2
  155.  
  156. # Írja ki azon legidősebb 6 hölgy adatait, akinek a nevében nem szerepel a "P" betű, de szerepel a "k" betű, és 97000-nél nem keresnek többet.
  157. sort -t ":" -k4 adat | awk -F ":" '($3=="hölgy") && ($2!~/[P]/) && ($2~/[k]/) && ($6<=97000)' | head -n6
  158.  
  159. # Melyik keresztnév a leggyakoribb az urak körében? Listázzuk az egyes keresztneveket, és az adott névvel rendelkező urak darabszámát, darabszám szerint növekvő sorrendben.
  160.  
  161.     awk -F ":" '($3=="úr") {print $2}' adat | awk -F " " '{print $2}' | sort | uniq -c | awk -F " " '{print $2 ":" $1}' | sort -t ":" -nk2
Advertisement
Add Comment
Please, Sign In to add comment