# UNIX FOR LINGUISTS QUICK REFERENCE # SOPRAVVIVENZA # in questi appunti, tutto cio' che segue il cancelletto va # interpretato come commento, e non come parte di un comando cd # torna a casa cd percorso/per/andare/dove/vuoi cd ~/percorso/che/parte/dalla/home cd .. # in su di una directory ls # mostra cio' che si trova in questa cartella ls percorso/per/trovare/i/dati/da/listare rm file rmdir directory_vuota rm -fr directory_piena # non chiede conferma prima di procedere! mv vecchio_nome_del_file nuovo_nome_del_file mv nome_del_file nuova_cartella_di_residenza_del_file cp file_esistente copia_del_file cp percorso/al/file/da/copiare . # copia file in directory corrente cp percorso/al/file/da/copiare percorso/a/dove/copiarlo cp questo_file ~ # copia questo file nella mia home # e via dicendo... # notare che secondo argomento di mv e cp puo' essere nuovo nome di # file o directory dove mettere il file o la sua copia (entrambi # possono essere prefissati da percorso) man nome_del_programma # ricordare anche: # tab completion, up-arrow, ctrl+c (per fermare processo in corso) # struttura del comando tipico: comando -opzioni input # PIPING E REDIRECTION primo_comando input | secondo_comando | terzo_comando | more primo_comando input | secondo_comando | terzo_comando > output_in_questa_dir primo_comando input | secondo_comando | terzo_comando > ~/output_nella_home # NB: l'input in linea di massima va specificato SOLO per il primo comando; # gli altri comandi prendono come input l'output del comando precedente # PRIMI COMANDI UTILI PER LAVORARE SUI TESTI cat file* > contents_of_all_files cat file1 file2 file3 > contents_of_files_1_2_3 wc file # line, word, character count nl file # numera righe head file # mostra prime dieci righe tail file # mostra ultime dieci righe head -100 file # mostra prime 100 righe tail -1 file # mostra ultima riga # i due ruoli di tail: tail -5 # stampa le ultime 5 righe tail +5 # stampa le righe dalla quinta in poi # EGREP E ESPRESSIONI REGOLARI egrep "espressione_regolare" input # ricordarsi: espressione regolare si applica a righe (se le righe # corrispondono a parole, si applica a parole, ovviamente...) # esempi a # righe che contengono una a (possono contenere # altro) ^a$ # righe che contengono esattamente una a ^.$ # righe che contengono esattamente un carattere .[0-9]$ # righe di almeno due caratteri che finiscono con # una cifra ^a.+a$ # righe che iniziano e finiscono per a e contengono # almeno tre caratteri ^a..*a$ # la stessa cosa ^a.*a$ # righe che iniziano e finiscono per a e contengono # almeno due caratteri ^a.a$ # righe che iniziano e finiscono per a e contengono # esattamente tre caratteri dog # righe che contengono la stringa dog [dog] # righe che contengono una d O una o O una g ^dog # righe che iniziano con la stringa dog [^dog] # righe in cui almeno un carattere non e' una d o una o # o una g (NB: ``dogs'' e' una riga che soddisfa questa # condizione, perche' il carattere ``s'' non e' # nell'insieme d, o, g) ^[^a]*a[^a]*$ # righe che contengono esattamente una a (e possono # contenere qualsiasi altro carattere) # TOKENIZZAZIONE sed "s/pattern_da_sostituire/con_cosa_sostituirlo/g" input sed "s/[^a-zA-Z]/\n/g" input sed "s/prima/azione/g; s/seconda/azione/g" input # ricordarsi di caratteri accentati, apostrofo, ecc. egrep -v "$^" # elimina righe vuote egrep -v "pattern_incriminato" # elimina righe che contengono pattern # da eliminare cat input_dir/* | sed "s/[^a-zA-Z]/\n/g" | lc | egrep -v "$^" > corpus.tok # NB: lc NON e' un programma standard: chiedetemelo, se volete # installarlo sulle vostre macchine # LESSICI E LISTE DI FREQUENZA sort file.tok | uniq > file.lex sort file.tok | uniq -c > file.fq_sorted_by_word sort file.tok | uniq -c | sort -nrk1 > file.fq_sorted_by_fq # usare gawk per operare su liste strutturate in campi: gawk 'condizione{azione}' # per gawk righe sono divise in ``campi'' separati da spazi gawk '$1>100{print $2}' # stampa secondo campo di righe in cui # valore in primo campo e' maggiore di 100 gawk '$1>100{print}' input # senza campi specificati, print stampa la # riga intera gawk '$1>=100 && $1<=200 {print $2}' input # due condizioni gawk '{print $2,$1}' input # senza condizioni, l'azione si applica a tutte # le righe: un metodo per cambiare l'ordine dei # campi o selezionare solo alcuni campi # paragonare liste con comm comm -23 lex1 lex2 > parole_solo_in_lex1 comm -13 lex1 lex2 > parole_solo_in_lex2 comm -12 lex1 lex2 > parole_sia_in_lex1_che_in_lex2 # paragonare le 100 parole piu' frequenti in file1.tok con le 100 # 100 parle piu' frequenti in file2.tok # NB: per motivi grafici, vado a capo all'interno delle pipes (usando # \): quando applicate questi comandi, non andate a capo (e non usate \) sort file1.tok | uniq -c | sort -nrk1 | head -100 \ | gawk '{print $2}' | sort > file1.top sort file2.tok | uniq -c | sort -nrk1 | head -100 \ | gawk '{print $2}' | sort > file2.top comm file1.top file2.top | more # NGRAMMI tail +2 file.tok > file.tok.2 paste file.tok file.tok.2 | gawk 'NF==2{print}' > file.bigrams # gawk serve a filtrare la riga con una sola parola (NF==2 vuol dire: # a condizione che la riga abbia due campi) # tutto in una volta: tail +2 file.tok | paste file.tok - | gawk 'NF==2{print}' > file.bigrams # NB: bisogna usare il trattino (``-'') quando un comando in una pipe # prende come input sia l'output dal comando precedente che uno o piu' # files (il trattino indica dove, nell'ordine degli argomenti, va # l'output del comando precedente) # trigrammi: tail +3 file.tok > file.tok.3 paste file.tok file.tok.2 file.tok.3 | gawk 'NF==3{print}' > file.trigrams