Enviado em 16/04/2020 - 01:03h
Eu tenho dois arquivos .txt e gostaria de juntar os dois e colocar em um só. Os meus dados são assim:Enviado em 19/04/2020 - 23:59h
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1]) ) printf "%s %s %d %s %s\n" ,cp1[$1],cp2[$1],cp3[$1],cp4[$1],$4 }
awk -f mescla.awk arq1.txt arq2.txt Saída: 1 1 1998 32.5 28.2 2 1 1998 37.2 35.2
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;cp5[$1]=$5;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1] && $4==cp4[$1])) printf "%s %s %s %d %s %s\n",cp1[$1],cp2[$1],cp3[$1],cp4[$1],cp5[$1],$5 }
0 15 6 2014 0.6 1 15 6 2014 0.4 2 15 6 2014 1.19 3 15 6 2014 0.2 4 15 6 2014 0.2 5 15 6 2014 0.4 6 15 6 2014 0.4 7 15 6 2014 0.2 8 15 6 2014 0.2 9 15 6 2014 NaN 10 15 6 2014 NaN 11 15 6 2014 NaN
awk -i inplace -v INPLACE_SUFFIX=.bak '{Uts=mktime($4" "$3" "$2" "$1" "00" "00);printf "%s %02d %02d %02d %s %s\n" ,Uts,$1,$2,$3,$4,$5}' arquivo1.txt arquivo2.txt 2º Passo salve o mescla cat mescla.awk BEGIN{FS=" ";printf "H D M Ano Vlr_1 Vlr_2\n";} { if(FILENAME == "arquivo1.txt"){data_01[$1]=$1;valor_01[$1]=$6;} if(FILENAME == "arquivo2.txt") if($1 == data_01[$1] && $6 != "NaN" && valor_01[$1] != "NaN") printf "%s %s %s %s %s %s\n" ,$2,$3,$4,$5,$6,valor_01[$1]; #else print $2,$3,$4,$5,$6,valor_01[$1],"NÃO CASOU!!" } 3 passo, execute: awk -f mescla.awk arquivo1.txt arquivo2.txt|column -t Resultado: H D M Ano Vlr_1 Vlr_2 Status 14 06 06 2014 1.364228 0.39 Okay! 18 14 06 2014 0.247516 0.2 Okay! 20 14 06 2014 5.097166 6.5 Okay! 23 14 06 2014 1.676368 0.4 Okay! 00 15 06 2014 5.551308 0.6 Okay! 01 15 06 2014 1.951 0.4 Okay! 02 15 06 2014 0.532686 1.19 Okay! 03 15 06 2014 1.3404 0.2 Okay! 04 15 06 2014 8.60231 0.2 Okay! 05 15 06 2014 8.139638 0.4 Okay! 06 15 06 2014 1.22334 0.4 Okay! 07 15 06 2014 0.439229 0.2 Okay! 08 15 06 2014 0.386959 0.2 Okay! 12 15 06 2014 0.16528 0.2 Okay! 13 15 06 2014 1.969192 0.2 Okay! 08 23 06 2014 0.474899 0.2 Okay! 19 26 06 2014 0.025491 0.39 Okay! 02 27 06 2014 0.548529 3.74 Okay! 07 27 06 2014 0.496584 0.2 Okay! 17 29 06 2014 0.073492 1.18 Okay!
Enviado em 16/04/2020 - 03:56h
Os arquivos estão preordenados, e ambos ordenados com o mesmo citério? Se estiverem, é melhor, porque isso lhe permitirá percorrer os dois simultaneamente.arquivos arq1, arq2 variáveis fim_arq1, dia1, mês1, ano1, valor1, data1 variáveis fim_arq2, dia2, mês2, ano2, valor2, data2 abre arq1 para leitura fim_arq1 recebe falso abre arq2 para leitura fim_arq2 recebe falso lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 recebe verdadeiro lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro enquanto fim_arq1 = falso ou fim_arq2 = falso, se fim_arq1 = falso, data1 recebe formatação("YYYYmmdd", dia1, mês1, ano1) se fim_arq2 = falso, data2 recebe formatação("YYYYmmdd", dia2, mês2, ano2) se (fim_arq1 = falso) e ((fim_arq2 = verdadeiro) ou (data1 < data2)), imprime dia1, mes1, ano1, valor1, NaN lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 receber verdadeiro senão, se (fim_arq2 = falso) e ((fim_arq2 = verdadeiro) ou (data1 > data2)), imprime dia2, mês2, ano2, NaN, valor2 lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro senão # isto é: data1=data2 imprime dia1, mês1, ano1, valor1, valor2 lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 receber verdadeiro lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro fecha arq2 fecha arq1
Enviado em 16/04/2020 - 14:44h
Boa tarde Carolina.Enviado em 16/04/2020 - 14:51h
arquivos arq1, arq2 variáveis fim_arq1, dia1, mês1, ano1, valor1, data1 variáveis fim_arq2, dia2, mês2, ano2, valor2, data2 abre arq1 para leitura fim_arq1 recebe falso abre arq2 para leitura fim_arq2 recebe falso lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 recebe verdadeiro lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro enquanto fim_arq1 diferente de falso ou fim_arq2 diferente de falso, se fim_arq1 = falso, data1 recebe formatação("YYYYmmdd", dia1, mês1, ano1) se fim_arq2 = falso, data2 recebe formatação("YYYYmmdd", dia2, mês2, ano2) se (fim_arq1 = falso) e ((fim_arq2 = verdadeiro) ou (data1 < data2)), imprime dia1, mes1, ano1, valor1, NaN lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 receber verdadeiro senão, se (fim_arq2 = falso) e ((fim_arq2 = verdadeiro) ou (data1 > data2)), imprime dia2, mês2, ano2, NaN, valor2 lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro senão # isto é: data1=data2 imprime dia1, mês1, ano1, valor1, valor2 lê (dia1, mês1, ano1, valor1) de arq1 se leitura falhou, fim_arq1 receber verdadeiro lê (dia2, mês2, ano2, valor2) de arq2 se leitura falhou, fim_arq2 recebe verdadeiro fecha arq2 fecha arq1
Enviado em 16/04/2020 - 14:52h
Enviado em 16/04/2020 - 15:31h
Enviado em 16/04/2020 - 15:38h
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1]) ) printf "%s %s %d %s %s\n" ,cp1[$1],cp2[$1],cp3[$1],cp4[$1],$4 }
awk -f mescla.awk arq1.txt arq2.txt Saída: 1 1 1998 32.5 28.2 2 1 1998 37.2 35.2
Enviado em 17/04/2020 - 01:30h
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1]) ) printf "%s %s %d %s %s\n" ,cp1[$1],cp2[$1],cp3[$1],cp4[$1],$4 }
awk -f mescla.awk arq1.txt arq2.txt Saída: 1 1 1998 32.5 28.2 2 1 1998 37.2 35.2
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;cp5[$1]=$5;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1] && $4==cp4[$1])) printf "%s %s %s %d %s %s\n",cp1[$1],cp2[$1],cp3[$1],cp4[$1],cp5[$1],$5 }
0 15 6 2014 0.6 1 15 6 2014 0.4 2 15 6 2014 1.19 3 15 6 2014 0.2 4 15 6 2014 0.2 5 15 6 2014 0.4 6 15 6 2014 0.4 7 15 6 2014 0.2 8 15 6 2014 0.2 9 15 6 2014 NaN 10 15 6 2014 NaN 11 15 6 2014 NaN
Enviado em 17/04/2020 - 03:28h
0 15 6 2014 0.6 1 15 6 2014 0.4 2 15 6 2014 1.19 3 15 6 2014 0.2 4 15 6 2014 0.2 5 15 6 2014 0.4 6 15 6 2014 0.4 7 15 6 2014 0.2 8 15 6 2014 0.2 9 15 6 2014 NaN 10 15 6 2014 NaN 11 15 6 2014 NaN
Enviado em 17/04/2020 - 13:16h
Um exemplo de código em C++ que permite ler dois arquivos de entrada preordenados, cada um deles com linhas no formato "dia mês ano valor". Ele é uma implementação do algoritmo que eu mostrei inicialmente.#include <iostream> // Entrada e saída padrão (terminal, no nosso caso). #include <fstream> // Operações com arquivos. #include <cmath> // NaN. using namespace std; // Tipo de dados para representar e comparar datas. struct data_t { unsigned ano, mes, dia; bool operator<(data_t outro){ return ano<outro.ano || (ano==outro.ano && ( mes<outro.mes || (mes==outro.mes && ( dia<outro.dia )) )) ; } }; // Função para imprimir a data num formato desejado. ostream &operator<<(ostream &os, data_t data){ return os << data.dia << ' ' << data.mes << ' ' << data.ano; } int main(){ ifstream arq1("/tmp/arq1.txt"), arq2("/tmp/arq2.txt"); data_t data1, data2; double valor1, valor2; arq1 >> data1.dia >> data1.mes >> data1.ano >> valor1; arq2 >> data2.dia >> data2.mes >> data2.ano >> valor2; while(arq1 || arq2){ if(arq1 && (!arq2 || data1<data2)){ // Se quiser surprimir NaNs do arq2, comente linha abaixo. cout << data1 << ' ' << valor1 << ' ' << NAN << '\n'; arq1 >> data1.dia >> data1.mes >> data1.ano >> valor1; } else if(arq2 && (!arq1 || data2<data1)){ // Se quiser surprimir NaNs do arq1, comente linha abaixo. cout << data2 << ' ' << NAN << ' ' << valor2 << '\n'; arq2 >> data2.dia >> data2.mes >> data2.ano >> valor2; } else{ cout << data1 << ' ' << valor1 << ' ' << valor2 << '\n'; arq1 >> data1.dia >> data1.mes >> data1.ano >> valor1; arq2 >> data2.dia >> data2.mes >> data2.ano >> valor2; } } }
Enviado em 17/04/2020 - 16:07h
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1]) ) printf "%s %s %d %s %s\n" ,cp1[$1],cp2[$1],cp3[$1],cp4[$1],$4 }
awk -f mescla.awk arq1.txt arq2.txt Saída: 1 1 1998 32.5 28.2 2 1 1998 37.2 35.2
{ if(FILENAME=="arq1.txt"){cp1[$1]=$1;cp2[$1]=$2;cp3[$1]=$3;cp4[$1]=$4;cp5[$1]=$5;} if(FILENAME=="arq2.txt" && ($1==cp1[$1] && $2==cp2[$1] && $3==cp3[$1] && $4==cp4[$1])) printf "%s %s %s %d %s %s\n",cp1[$1],cp2[$1],cp3[$1],cp4[$1],cp5[$1],$5 }
0 15 6 2014 0.6 1 15 6 2014 0.4 2 15 6 2014 1.19 3 15 6 2014 0.2 4 15 6 2014 0.2 5 15 6 2014 0.4 6 15 6 2014 0.4 7 15 6 2014 0.2 8 15 6 2014 0.2 9 15 6 2014 NaN 10 15 6 2014 NaN 11 15 6 2014 NaN
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
[AJUDA] Problemas ao atualizar BIOS da Gigabyte B550M K rev. 1.1 — “RO... (4)
Inicializaçao lenta (alguns processos rodando) Debian 11 Bullseye [RES... (2)
Erro na atualização dos pacotes (6)