Moulinator

Moulinator est un petit script bash fait à l'arrache pour aider le travail à la chaîne. Concrètement, c'est une petite moulinette qui va générer des chaines de caractère, des commandes, des infos ...

Script

Source: moulinator.sh

#!/bin/bash

# Data file: CSV file with headers
# Template file: template with header variables
src_Data=$(sed '1,1 d' $1) 
#src_Data=$(sed '1,1 d' $1 | sed 's!\.!\\\.!g')
src_Tpl=$(cat $2)
src_Output=$src_Tpl


# Read header and store them in a table
scr_Headers=$(sed '2,$ d' $1 )
scr_Headers_nbr=$(echo "$scr_Headers" | sed 's!,!\n!g' | wc -l)

# Debug
#echo -ne "== Arguments are $1 and $2\n"
echo -ne "== Data file:\n$src_Data\n"
#echo -ne "== Template file:\n$src_Tpl\n"
echo -ne "== Headers are:\n$scr_Headers\n"
#echo -ne "== Fields  are:\n$scr_Headers_nbr\n"

#echo ""

# Read each lines of the data file (except headers)
echo  "$src_Data" | while read line
do

	src_Output=$(echo -n "$src_Tpl")

	#echo -ne "\nDoing line: $line\n"

	for scr_Field in $(seq 1 $scr_Headers_nbr)
		do

		# Get header and field value
		src_h=$(echo -n "$scr_Headers" | awk -F',' '{print $'$scr_Field'}')
		src_f=$(echo -n "$line" | awk -F',' '{print $'$scr_Field'}')

		# Debug
		#echo -ne "Header: $src_h\n"
		#echo -ne "Field $scr_Field: $src_f\n"		

		# Do substitution
		src_Output=$(echo -n  "$src_Output" | sed "s/\\\$$src_h\\\$/$src_f/g")
		#echo -ne "Action: $src_Output \n | sed --posix \"s/\$$src_h\$/$src_f/g\""
		#echo -ne "ttttt => $src_Output" | sed "s/$src_h/$src_f/"
	done

	echo  "$src_Output"

	echo -en ""

done 

Comme vous pouvez le voir, c'est vraiment fait à l'arrache, on pourrait diviser par 10 sa taille.

Utilisation

Le script est très simple, il n'y a même pas de man (à changer à l'avenir): ./moulinator <source.csv> <template.tpl>

Source

Il s'agit simplement d'un fichier CSV (virgules):
SERV,IP,OWNER
toto.com,10.0.1.10,Mr Tetu
walala.tutu.com,192.168.1.1,Mme Michu
priv.domaine.com,10.0.1.15,Mr Chirac

Le principe est de mettre des en-têtes en majuscule (par convention), et de rajouter une ligne par contenu.

Template

Ce'est un simple fichier texte comporte les lignes à générer:

# La machine de $OWNER$ s'appelle $SERV$ ($IP$)
ssh root@$SERV$ -p 2222

Il faut juste placer dans les fichiers les variables entre deux $: @$VAR$@

Exemple

Si on lance:
./moulinator source.csv template.tpl
On obtient:
== Data file:
toto.com,10.0.1.10,Mr Tetu
walala.tutu.com,192.168.1.1,Mme Michu
priv.domaine.com,10.0.1.15,Mr Chirac
== Headers are:
SERV,IP,OWNER

# La machine de Mr Tetu s'appelle toto.com (10.0.1.10)
ssh root@toto.com -p 2222

# La machine de Mme Michu s'appelle walala.tutu.com (192.168.1.1)
ssh root@walala.tutu.com -p 2222

# La machine de Mr Chirac s'appelle priv.domaine.com (10.0.1.15)
ssh root@priv.domaine.com -p 2222

Y'a plus qu'à copier/coller les lignes générées dans son shell, vim ...

Page last modified on September 21, 2012, at 02:46 PM EST