thinomar
(usa Linux Mint)
Enviado em 07/05/2015 - 15:06h
Só para ressaltar, o símbolo operador deve estar entre aspas. Caso queira tentar sem, o simbolo de multiplicacao vai deixar claro por que pedi as aspas :)
Se quiser salvar a saída em outro arquivo, basta comentar a última linha.
Ta ae:
#!/bin/bash
# Script escrito por: Thiago Martins
# Data: 07/05/2015
#
# Sintaxe: operacao.sh arquivo1 "operacao" arquivo2
#
# Exemplo de arquivos:
# Arq 1:
# 4 4 4 4 4
# 4 4 4 4 4
# 4 4 4 4 4
# 4 4 4 4 4
#
# Arq 2:
# 3 3 3 3 3
# 3 3 3 3 3
# 3 3 3 3 3
# 3 3 3 3 3
#
# Comando:
# operacao.sh ./arq1 "+" ./arq2
#
# Saida:
# 7 7 7 7 7
# 7 7 7 7 7
# 7 7 7 7 7
# 7 7 7 7 7
#
# A operacao deve estar entre aspas, devido
# problemas que o * de multiplicacao causa
#
# Os arquivos devem ter a mesma quantidade
# de colunas e de linhas para dar certo
arq1="$1"
operacao="$2"
arq2="$3"
# Verifica se numero de linhas e igual
linhas1=`awk 'END{print NR}' $arq1`
linhas2=`awk 'END{print NR}' $arq2`
if [ "$linhas1" -ne "$linhas2" ] ; then
echo "Arquivos com quantidade de linhas diferentes"
exit 1
fi
# Verifica se numero de colunas e igual
colunas1=`awk '{print NF}' $arq1`
colunas2=`awk '{print NF}' $arq2`
if [ "$colunas1" != "$colunas2" ] ; then
echo "Arquivos com quantidade de colunas diferentes"
exit 1
fi
# Separa linhas, depois numeros, entao calcula,
# concatena novamente, salva em arquivo temporario
for((i=1;i<=$linhas1;++i));
do
lin1=`head -n $i $arq1 | tail -n 1`
lin2=`head -n $i $arq2 | tail -n 1`
for((j=1;j<=`echo $lin1 | awk '{print NF}'`;++j));
do
n1=`echo $lin1 | cut -d ' ' -f $j`
n2=`echo $lin2 | cut -d ' ' -f $j`
linha="$linha`echo -e "$n1 $operacao $n2"|bc -l`"
linha="$linha "
done
echo -e "$linha" >> ./arqTemp
linha=""
done
# Imprime na tela
cat arqTemp
# Exclui arquivo temporario
rm -f ./arqTemp
--
The flames warm my languid soul