Leia dois arquivos de texto, concatene cada linha

3

Eu tenho dois arquivos de texto do mesmo tamanho, em ordem: um dos produtos, o outro dos produtos de comparação. Eu gostaria que a saída fosse "produto; comparação" para cada linha. Sim, eu poderia jogá-los em uma planilha e exportar como csv, mas gostaria de entender como fazer isso no bash. Os dois arquivos são fornecidos como argumentos.

#!/bin/bash
file1="$1";
file2="$2";
separator=";";
while read -r product
do
  read -r comp < "$file2";
  echo $product $separator $comp >> temp.txt;
done < "$file1"
tr -d " " < temp.txt | sort > out.txt
rm temp.txt

Isso me dá todos os produtos com o mesmo produto de comparação! Por exemplo

$: cat out.txt
product1;comp1
product2;comp1
product3;comp1

Eu obviamente não estou lendo a única linha do arquivo comp corretamente - o que estou fazendo errado? Como leio uma única linha?

    
por Escher 03.10.2014 / 16:53

1 resposta

4

Se você realmente quiser fazer isso no bash, sugiro usar a opção -u fd para ler os dois arquivos simultaneamente usando fluxos numerados, por exemplo

while read -r -u3 product; read -r -u4 comp; do 
  printf '%s;%s\n' "$product" "$comp"
done 3<products.txt 4<comps.txt

No entanto, você pode usar apenas o utilitário paste

paste -d\; products.txt comps.txt
    
por 03.10.2014 / 17:02