Subtrair dados de colunas de dois arquivos diferetentes!!!

1. Subtrair dados de colunas de dois arquivos diferetentes!!!

Guilherme Maia Santos
GuiSawyer

(usa Ubuntu)

Enviado em 07/05/2015 - 12:54h


Galera, tudo bem?!
Meu problema é o seguinte
tenho dois arquivos, de mesmo formato, cada um com 7 colunas e 2000 linhas
eu gostaria de pegar o arq 1 e subtrair cada valor dessa tabela pelo respectivo valor da tabela do arq 2...
tem como eu fazer isso?

ex:
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

Arq 1 - Arq 2 =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Desde já agradeço !!





  


2. Vamos lá...

Gabriel Bassani Ribieiro
gbassanir

(usa Debian)

Enviado em 07/05/2015 - 13:43h

Boa tarde,

Ficou meio vago para mim. Subtrair através de que? "Alguma ferramenta ou chamar no código e trabalhar com os arquivos, se for códigos, qual linguagem?"... e por aí vai

Att,



3. O fodendo script

thinomar
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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts