Linux:Sed és awk
(Változatok közti eltérés) (Új oldal, tartalma: „== Sed == * Készíts shell scripet, mely egy megadott fájl tartalmát úgy jeleníti meg, hogy az összes <code>this</code> szót cseréli a <code>that</code> szóra! <…”) |
|||
11. sor: | 11. sor: | ||
fi | fi | ||
cat $FILE | sed 's/this/that/g' | cat $FILE | sed 's/this/that/g' | ||
- | </code> | + | </code></megoldas> |
- | </megoldas> | + | |
- | * Az előző feladatot oldd meg úgy, hogy a módosított szöveget írd vissza az eredeti fájlba! A módosítás előtti állapotról .bak kiterjesztéssel készüljön egy biztonsági másolat! | + | * Az előző feladatot oldd meg úgy, hogy a módosított szöveget írd vissza az eredeti fájlba! A módosítás előtti állapotról .bak kiterjesztéssel készüljön egy biztonsági másolat! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
25. sor: | 24. sor: | ||
mv $FILE $FILE.bak | mv $FILE $FILE.bak | ||
cat $FILE.bak | sed 's/this/that/g' >$FILE | cat $FILE.bak | sed 's/this/that/g' >$FILE | ||
- | </code> | + | </code></megoldas> |
== Awk == | == Awk == | ||
- | * Készíts awk programot, mely a /etc/passwd fájlból kiírja a felhasználók bejelentkezési neveit! | + | * Készíts awk programot, mely a /etc/passwd fájlból kiírja a felhasználók bejelentkezési neveit! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
cat /etc/passwd | awk -F: '{ print $1; }' | cat /etc/passwd | awk -F: '{ print $1; }' | ||
- | </code> | + | </code></megoldas> |
* Készíts programot, mely kiszámítja a 3 négyzetét! A kiíráshoz használd a printf() függvényt! | * Készíts programot, mely kiszámítja a 3 négyzetét! A kiíráshoz használd a printf() függvényt! | ||
- | <code lang="bash"> | + | <code lang="bash"> <megoldas> |
#!/bin/bash | #!/bin/bash | ||
cat /etc/passwd | awk -F: ' | cat /etc/passwd | awk -F: ' | ||
42. sor: | 41. sor: | ||
printf ("3^3=%d\n",3^3) ; | printf ("3^3=%d\n",3^3) ; | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Írasd ki a /etc/passwd fájlban található UID-eket lebegőpontos (6 egész és 2 tizedes), egész, oktális és hexadecimális számként, végül jelenítsd meg a felhasználó bejelentkezési nevét is! | + | * Írasd ki a /etc/passwd fájlban található UID-eket lebegőpontos (6 egész és 2 tizedes), egész, oktális és hexadecimális számként, végül jelenítsd meg a felhasználó bejelentkezési nevét is! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
51. sor: | 50. sor: | ||
printf("User ID: %+6.2f %d %o %X %s\n", $3, $3, $3, $3, $1); | printf("User ID: %+6.2f %d %o %X %s\n", $3, $3, $3, $3, $1); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Írasd ki a /etc/passwd fájl tartalmát nagybetűssé alakítva! Az egyes sorok legyenek sorszámozva! | + | * Írasd ki a /etc/passwd fájl tartalmát nagybetűssé alakítva! Az egyes sorok legyenek sorszámozva! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
61. sor: | 60. sor: | ||
printf ("%d: %s\n", NR, toupper($0)); | printf ("%d: %s\n", NR, toupper($0)); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Számítsd ki a /etc/passwd fájlban levő UID-ek összegét és átlagát! (Tudjuk, hogy ez az adat semmire sem utal, csupán azért használjuk ezt a fájlt, mert minden rendszerben megtalálható.) | + | * Számítsd ki a /etc/passwd fájlban levő UID-ek összegét és átlagát! (Tudjuk, hogy ez az adat semmire sem utal, csupán azért használjuk ezt a fájlt, mert minden rendszerben megtalálható.) <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
77. sor: | 76. sor: | ||
print ("Az atlag: " SUM/NR); | print ("Az atlag: " SUM/NR); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Írd ki a képernyőre a /etc/group fájl leghosszabb sorát! [Módosíthatod a feladatot úgy, hogy a legrövidebb nem üres sort jelentítsd meg!] | + | * Írd ki a képernyőre a /etc/group fájl leghosszabb sorát! [Módosíthatod a feladatot úgy, hogy a legrövidebb nem üres sort jelentítsd meg!] <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
98. sor: | 97. sor: | ||
printf ("A leghosszabb sor: %s\n", sor); | printf ("A leghosszabb sor: %s\n", sor); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Ellenőrizd, hogy mely felhasználóknak van 0-s UID-jük a /etc/passwd-ben! (Ezek teljes jogkörrel rendelkeznek a Unix rendszerekben.) | + | * Ellenőrizd, hogy mely felhasználóknak van 0-s UID-jük a /etc/passwd-ben! (Ezek teljes jogkörrel rendelkeznek a Unix rendszerekben.) <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
110. sor: | 109. sor: | ||
if ($3==0) print ($0); | if ($3==0) print ($0); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Jelenítsd meg az acer.txt fájl sorait úgy, hogy a 40 karakternél hosszabb sorokat ne teljes hosszukban, hanem csak az első 40 karakterig írd ki, és annak jelzésére, hogy a sor ennél hosszabb, a végére írj három pontot! Minden sor elején jelenjen meg, hogy mekkora annak teljes hossza! | + | * Jelenítsd meg az acer.txt fájl sorait úgy, hogy a 40 karakternél hosszabb sorokat ne teljes hosszukban, hanem csak az első 40 karakterig írd ki, és annak jelzésére, hogy a sor ennél hosszabb, a végére írj három pontot! Minden sor elején jelenjen meg, hogy mekkora annak teljes hossza! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
FILE=acer.txt | FILE=acer.txt | ||
129. sor: | 128. sor: | ||
printf ("%s\n",$0); | printf ("%s\n",$0); | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Jelenítsd meg a 10-nél kisebb pozitív egész számokat és négyzeteiket! | + | * Jelenítsd meg a 10-nél kisebb pozitív egész számokat és négyzeteiket! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/usr/bin/awk -f | #!/usr/bin/awk -f | ||
139. sor: | 138. sor: | ||
} | } | ||
} | } | ||
- | </code> | + | </code></megoldas> |
- | * Jelenítsd meg az /etc/passwd fájl sorait úgy, hogy a mezőket visszafelé íratod ki! Azaz az első mező utolsóként, a második utolsó előttiként, az utolsó pedig elsőként jelenjen meg! | + | * Jelenítsd meg az /etc/passwd fájl sorait úgy, hogy a mezőket visszafelé íratod ki! Azaz az első mező utolsóként, a második utolsó előttiként, az utolsó pedig elsőként jelenjen meg! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
149. sor: | 148. sor: | ||
printf ("\n") | printf ("\n") | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
- | * Jelenítsd ,eg az /etc/passwd fájlt úgy, hogy minden sort visszafelé íratsz ki! | + | * Jelenítsd ,eg az /etc/passwd fájlt úgy, hogy minden sort visszafelé íratsz ki! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
cat a.txt | grep -v ^# | awk -F' ' ' | cat a.txt | grep -v ^# | awk -F' ' ' | ||
168. sor: | 167. sor: | ||
printf ( "%s\n", printRev($0) ); | printf ( "%s\n", printRev($0) ); | ||
}’ | }’ | ||
- | </code> | + | </code></megoldas> |
- | * Írasd ki az /etc/passwd fájt sorait visszafelé, azaz a legutolsó sor jelenjen meg elsőként, az első pedig utolsóként! | + | * Írasd ki az /etc/passwd fájt sorait visszafelé, azaz a legutolsó sor jelenjen meg elsőként, az első pedig utolsóként! <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
179. sor: | 178. sor: | ||
for(i=NR; i>0; i--) print line[i] | for(i=NR; i>0; i--) print line[i] | ||
}' | }' | ||
- | </code> | + | </code></megoldas> |
185. sor: | 184. sor: | ||
**292 the | **292 the | ||
**166 a | **166 a | ||
- | **156 of | + | **156 of <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
201. sor: | 200. sor: | ||
for (i in szo) print (szo[i], i) | for (i in szo) print (szo[i], i) | ||
}' | sort -n -r | more | }' | sort -n -r | more | ||
- | </code> | + | </code></megoldas> |
- | * Készíts gyakorisági listát a /etc/passwd fájlban található shellekről, melyik hányszor fordul elő? | + | * Készíts gyakorisági listát a /etc/passwd fájlban található shellekről, melyik hányszor fordul elő? <megoldas> |
<code lang="bash"> | <code lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
214. sor: | 213. sor: | ||
} | } | ||
' | sort -n -r | ' | sort -n -r | ||
- | </code> | + | </code></megoldas> |
A lap 2010. április 25., 20:07-kori változata
Sed
- Készíts shell scripet, mely egy megadott fájl tartalmát úgy jeleníti meg, hogy az összes
this code> szót cseréli a
that code> szóra!
- Az előző feladatot oldd meg úgy, hogy a módosított szöveget írd vissza az eredeti fájlba! A módosítás előtti állapotról .bak kiterjesztéssel készüljön egy biztonsági másolat!
Awk
- Készíts awk programot, mely a /etc/passwd fájlból kiírja a felhasználók bejelentkezési neveit!
- Készíts programot, mely kiszámítja a 3 négyzetét! A kiíráshoz használd a printf() függvényt!
<megoldas> #!/bin/bash cat /etc/passwd | awk -F: ' BEGIN { printf ("3^3=%d\n",3^3) ; }'
- Írasd ki a /etc/passwd fájlban található UID-eket lebegőpontos (6 egész és 2 tizedes), egész, oktális és hexadecimális számként, végül jelenítsd meg a felhasználó bejelentkezési nevét is!
- Írasd ki a /etc/passwd fájl tartalmát nagybetűssé alakítva! Az egyes sorok legyenek sorszámozva!
- Számítsd ki a /etc/passwd fájlban levő UID-ek összegét és átlagát! (Tudjuk, hogy ez az adat semmire sem utal, csupán azért használjuk ezt a fájlt, mert minden rendszerben megtalálható.)
- Írd ki a képernyőre a /etc/group fájl leghosszabb sorát! [Módosíthatod a feladatot úgy, hogy a legrövidebb nem üres sort jelentítsd meg!]
- Ellenőrizd, hogy mely felhasználóknak van 0-s UID-jük a /etc/passwd-ben! (Ezek teljes jogkörrel rendelkeznek a Unix rendszerekben.)
- Jelenítsd meg az acer.txt fájl sorait úgy, hogy a 40 karakternél hosszabb sorokat ne teljes hosszukban, hanem csak az első 40 karakterig írd ki, és annak jelzésére, hogy a sor ennél hosszabb, a végére írj három pontot! Minden sor elején jelenjen meg, hogy mekkora annak teljes hossza!
- Jelenítsd meg a 10-nél kisebb pozitív egész számokat és négyzeteiket!
- Jelenítsd meg az /etc/passwd fájl sorait úgy, hogy a mezőket visszafelé íratod ki! Azaz az első mező utolsóként, a második utolsó előttiként, az utolsó pedig elsőként jelenjen meg!
- Jelenítsd ,eg az /etc/passwd fájlt úgy, hogy minden sort visszafelé íratsz ki!
- Írasd ki az /etc/passwd fájt sorait visszafelé, azaz a legutolsó sor jelenjen meg elsőként, az első pedig utolsóként!
- Készíts a /tmp/szolista.txt fájl szavairól előfordulási gyakoriságukat tartalmazó listát! A lista legyen rendezett, elöl a legtöbbet előforduló szó szerepeljen! Példa a kimenetre:
- 292 the
- 166 a
- 156 of
- Készíts gyakorisági listát a /etc/passwd fájlban található shellekről, melyik hányszor fordul elő?