SBE: Shell By Example

Transcript

SBE: Shell By Example
SBE: Shell By Example
Lezione 2: I primi strumenti di elaborazione dei dati testuali
C01: Come posso scrivere il testo della filastrocca di "Fra' Martino campanaro" in un file? Quale
dei seguenti metodi è più adatto?
echo -e "Fra Martino,\nCampanaro,\nDormi tu?\nDormi tu?\nSuona le
campane,\nSuona le campane,\nDin, don, dan,\nDin, don, dan." > canzoncina.txt
echo 'Fra Martino,
Campanaro,
Dormi tu?
Dormi tu?
Suona le campane,
Suona le campane,
Din, don, dan,
Din, don, dan.' > canzoncina.txt
cat << EOT > canzoncina.txt
Fra Martino,
Campanaro,
Dormi tu?
Dormi tu?
Suona le campane,
Suona le campane,
Din, don, dan,
Din, don, dan.
EOT
cat <<- EOT > canzoncina.txt
Fra Martino,
Campanaro,
Dormi tu?
Dormi tu?
Suona le campane,
Suona le campane,
Din, don, dan,
Din, don, dan.
EOT
echo Fra Martino, > canzoncina.txt
echo Campanaro, >> canzoncina.txt
for i in 1 2
do
echo Dormi tu? >> canzoncina.txt
done
for i in 1 2
do
echo Suona le campane, >> canzoncina.txt
done
for i in 1 2
do
echo -n Din, don, dan >> canzoncina.txt
if [ $i -eq 1 ]
then
echo , >> canzoncina.txt
else
echo . >> canzoncina.txt
fi
done
C02: Cosa fa il seguente comando?
: > canzoncina2.txt
for i in 1 2
do
cat canzoncina.txt >> canzoncina2.txt
echo >> canzoncina2.txt
done
C03: Prova a spiegare cosa fa questo comando, e aiutati con il seguente per capire.
exec 3>&1
exec > canzoncina2.txt
for i in 1 2
do
cat canzoncina.txt
echo
done
exec 1>&3 3>&exec
exec
lsof
exec
lsof
3>&1
> prova.txt
-a -p $$ -d0,1,2,3
1>&3 3>&-a -p $$ -d0,1,2,3
C04: Come faccio a concatenare i file farfallina.txt, labellalavanderina.txt e lavispateresa.txt in
filastrocche.txt con un solo comando?
cat << EOT > farfallina.txt
Farfallina bella bianca,
vola vola e mai si stanca.
Vola qua, vola la',
va a posarsi proprio qua.
EOT
cat << EOT > labellalavanderina.txt
La bella lavanderina
che lava i fazzoletti
per i poveretti
della citta'.
Fai un salto
Fanne un altro
Fai la giravolta
Falla un'altra volta
Guarda in su
Guarda in giu'
Dai un bacio a chi vuoi tu!
EOT
cat << EOT > lavispateresa.txt
La vispa Teresa
avea tra l'erbetta
a volo sorpresa
gentil farfalletta.
E tutta giuliva
stringendola viva
gridava, gridava:
"L'ho presa! L'ho presa!"
A lei supplicando
l'afflitta grido':
"Vivendo volando,
che male ti fo?
Tu si' mi fai male
Stringendomi l'ale.
Deh, lasciami, anch'io
Son figlia di Dio".
Confusa, pentita,
Teresa arrossi'.
Dischiuse le dita
E quella fuggi'.
EOT
C05: Di quante righe, caratteri e parole sono composte queste filastrocche?
C06: Come estraggo le singole filastrocche da filastrocche.txt?
C07: Come faccio a scrivere il testo di farfallina.txt tutto maiuscolo?
C08: I messaggi del kernel possono essere visualizzati sia con il comando dmesg che leggendo il
file /var/log/dmesg, come faccio a consultarli passo passo, arrivare in fondo e tornare all'inizio e
cercare una determinata parola?
C09: Come faccio a monitorare il login e il logout degli utenti generalmente riportato nel log
/var/log/auth.log?
C10: Come posso monitorare il login e il logout degli utenti con una profondità di alcuni giorni?
C11: Come visualizzo gli ultimi 4 file di log modificati?
C12: Cosa fanno le seguenti istruzioni? Come posso rendere maiuscola l'intestazione?
cat << EOT > personaggi.csv
id,personaggio,autore,data di creazione,prima apparizione/distributore
1,Dick Tracy,Chester Gould,04-10-1931,Chicago Tribune Syndicate
2,Pogo,Walt Kelly,1941,Dell's Animal Comics
3,Li'l Abner Yokum,Al Capp,13-08-1934,United Feature Syndicate
4,Patricia "Peppermint Patty" Reichardt,Charles M. Shultz,22-08-1966,United
Feature Syndicate
5,Bristow,Frank Dickens,09-1961,Aberdeen Press & Journal
EOT
declare -a LUNGHEZZA_CAMPI
for i in `seq 1 5`
do
LUNGHEZZA_CAMPI[$i]=`cut -d, -f$i personaggi.csv | wc -L`
done
declare -a VALORE_CAMPI
: > personaggi.dat
while read line
do
for i in `seq 1 5`
do
VALORE_CAMPI[$i]=`cut -d, -f$i <<< $line`
printf '%-*s' ${LUNGHEZZA_CAMPI[$i]} "${VALORE_CAMPI[$i]}" >> personaggi.dat
done
echo >> personaggi.dat
done < personaggi.csv
C13: Come posso estrarre solo nome e autore da personaggi.csv e personaggi.dat? Posso invertire
l'ordine delle colonne?
C14: Come posso ordinare le righe dei file personaggi.csv e personaggi.dat per nome del
personaggio? E adeguare l'ID al nuovo ordine?
C15: Come faccio ad estrarre dalla seguente lista gli elementi duplicati? E ottenere una lista senza
duplicati?
cat << EOT > lista_colori.txt
carminio
blu di prussia
indaco
terra di siena
carminio
amaranto
indaco
EOT