Unindo dois dados de arquivo com base na comparação de coluna

1

Eu tenho dois arquivos contendo cada um timestamp e uma contagem da seguinte forma

Arquivo1.txt

   9 2016-06-22
   3 2016-06-23
   2 2016-06-24
   1 2016-06-25
   2 2016-06-26
   2 2016-06-27

Arquivo2.txt

   3 2016-06-23
   2 2016-06-25
   5 2016-06-27

Eu gostaria de criar uma saída onde ele usa a coluna de data (col-3) em ambos os arquivos e criar uma saída unida que é a seguinte.

Resultado esperado:

   9   2016-06-22
   3 3 2016-06-23
   2   2016-06-24
   1 2 2016-06-25
   2   2016-06-26
   2 5 2016-06-27

Usar o comando colar é muito complexo e envolve esforço manual para obter a saída esperada. Alguém pode me ajudar com isso?

Obrigado.

    
por krckumar 14.10.2016 / 14:00

1 resposta

2

A melhor solução é usar o comando join :

join -j 2 -a 1 -e " " -o 1.1 2.1 1.2 File1.txt File2.txt

Não é a solução mais elegante, mas se você quiser aprender shell script, isso deve funcionar:

while read line1; do
    file1_number=$(echo ${line1} | cut -d ' ' -f 1)
    file1_date=$(echo ${line1} | cut -d ' ' -f 2)
    line2=$(grep ${file1_date} File2.txt)
    file2_number=$(echo ${line2} | cut -d ' ' -f 1)
    if [[ -z "${file2_number}" ]]; then
        file2_number=" "
    fi
    echo ${file1_number} "${file2_number}" ${file1_date}
done < File1.txt
    
por 14.10.2016 / 14:19