venerdì 18 luglio 2014

Underscore [Brevi Esercizi]

Salve.

L'esercizio di oggi consiste nell'aggiungere l'underscore, "_", ai titoli di alcune canzoni riportati in un file di testo. 


Python

#!/usr/bin/python
# -*- coding: utf-8 -*-

var = open("brani_1.txt","w")
for line in open('brani.txt'):
    var.write(line.replace(' ','_'))
var.close()


Awk

cat brani.txt | awk '{ gsub(" ","_"); print; }' > brani_1.txt

Sed

cat brani.txt | sed 's/ /_/g' > brani_1.txt

Tr

cat brani.txt |  tr ' ' '_' > brani_1.txt

Bash

var=$(cat brani.txt); echo "${var// /_}" > brani_1.txt

Alla prossima!

L'indice della rubrica "Brevi Esercizi" lo trovate qui.

mercoledì 16 luglio 2014

Creare una directory e 24 sottodirectory con date sequenziali in un solo colpo [Brevi Esercizi]

Salve!

L'esercizio di oggi è semplice ma molto utile. Ho l'abitudine di catalogare, per anno e mese, tutti gli articoli che pubblico sul blog. L'ideale in questi casi è  di creare sin da subito le sottocartelle datate dentro cui poi conservare i vari file afferenti ai post che pubblico di volta in volta.

Ok, vado al dunque.

Con una sola riga di comando voglio creare una cartella di nome "Blog" che contenga 24 sottocartelle, ognuna delle quali deve avere per nome l'anno e il mese.

$ cd Documenti

$ mkdir -p Blog/{2013..2014}-{01..12}

Come potete capire, ho preso come periodo di riferimento il 2013 e il 2014.

Ecco il risultato.


 Eh, questa è la potenza dell'espansione delle parentesi graffe... Ne parleremo presto in modo approfondito.

 L'indice della rubrica "Brevi Esercizi" lo trovate qui.

Alla prossima!

martedì 15 luglio 2014

In vacanza con bash

Vabbè, un titolo di consolazione. Quest'anno niente vacanze. E allora mi illudo di partire. Con il treno.

Per andare in vancanza con bash, anzitutto bisogna installare due piccoli pacchetti.

$ sudo apt-get install sl figlet

Non vi resta che eseguire lo script. E buon viaggio!

Salvatelo in un file di testo, vacanza.sh, e rendetelo eseguibile:

$ chmod +x vacanza.sh

non vi resta che eseguirlo

$ ./vacanza.sh

#!/bin/bash

fine() {
 testo="By Bit3Lux The End"
 for i in $testo; do 
     figlet -ct "$i"
     sleep 1
     clear 
 done
 exit 0
}
count=5
 while [ $count -ge 0 ]; do 
     clear 
     figlet -ctf shadow $count
     let count-=1 
     sleep 1 
 done
clear
read -p "Premi invio per far partire il treno. " 
partenza=0
while [ $partenza -le 6 ] ; do 
      clear;  
      sl -alFe; 
      clear
      let partenza+=1
      if [ "$partenza" -eq 5 ]; then
          read -p "premi 1 se vuoi continuare, premi 2 se ti vuoi fermare: " continuo
          if [ $continuo -eq 1  ]; then
              partenza=0
          else
             clear
             fine
          fi
      fi
done

Cosa fa lo script:
  1. Inizia con un countdown.
  2. Vi chiede di far partire il treno
  3. Ogni viaggio dura 5/6 secondi
  4. Vi chiede se volete fermarvi o continuare il viaggio
  5. Saluti finali.

Alla prossima! ;)

domenica 13 luglio 2014

Sub(), Gsub() e Gensub() [awk]

Salve. Oggi iniziamo con la rassegna delle funzioni predefinite di (G)awk

Cominciamo con le funzioni di sostituzione, cioè con sub(), gsub() e gensub(), che ci permettono di sostituire una stringa con un'altra all'interno di un testo.

La differenza tra sub() e Gsub() è che mentre sub() sostituisce solo la prima occorrenza, gsub() ha una portata globale.

Gensub() invece ci dà la possibilità di stabilire quale occorrenza sostituire.

Per una questione di comodità assegniamo il nostro testo ad una variabile.

testo="Linux è il bene. Linux è il bene. Linux è il bene."

Sub()

Nel nostro primo esempio chiediamo ad awk di sostituire solo prima occorrenza "Linux" con "GNU/Linux".

$ echo "$testo" | awk '{ sub("Linux","GNU/Linux"); print; }'

Output:

GNU/Linux è il bene. Linux è il bene. Linux è il bene.

Con sed invece si fa così:

$ echo "$testo" | sed 's/Linux/GNU\/Linux/'

Output:

GNU/Linux è il bene. Linux è il bene. Linux è il bene.

Gsub()
 
In questo esempio chiediamo ad awk di sostituire tutte le occorrenze Linux con GNU/Linux.

$ echo "$testo" |  awk '{ gsub("Linux","GNU/Linux"); print; }'

Output:

GNU/Linux è il bene. GNU/Linux è il bene. GNU/Linux è il bene.

Con sed si fa così:

$ echo "$testo" | sed 's/Linux/GNU\/Linux/g'

Outuput:

GNU/Linux è il bene. GNU/Linux è il bene. GNU/Linux è il bene.


Gensub()

Nell'esempio sotto chiediamo ad awk, attraverso la funzione gensub(), di sostituire solo l'occorrenza che decidiamo noi. Nell'esempio chiediamo di sostituire la terza occorrenza "Linux" con GNU/Linux

$ echo "$testo" | awk '{ $0=gensub("Linux","GNU/Linux", 3); print; }'

Outuput:

Linux è il bene. Linux è il bene. GNU/Linux è il bene.

Con sed si fa così:

$ echo "$testo" | sed 's/Linux/GNU\/Linux/3'

Output:

Linux è il bene; Linux è il bene; GNU/Linux è il bene.

E se volessimo sostituire tutte le occorrenze, diverse tra loro, presenti in una riga, con la stringa GNU/Linux?

Definiamo la nostra solita variabile, sempre per comodità di esposizione.

testo1="Windows, Mac, Solaris"

$ echo "$testo1" | awk '{ gsub(/Windows|Mac|Solaris/, "GNU/Linux"); print }'

Output:

GNU/Linux, GNU/Linux, GNU/Linux


Con sed invece si fa così:

$ echo "$testo1" | sed 's/Windows\|Mac\|Solaris/GNU\/Linux/g'

Output:

GNU/Linux, GNU/Linux, GNU/Linux

Indice del corso "Un po' di AWK", qui.

Alla prossima!