同じ長さの2つのテキストファイルが順番に並べられています。一つは製品で、もう一つは製品比較です。各行の出力が「製品;比較」になりたいです。はい、スプレッドシートに入れてcsvにエクスポートできますが、bashでこれを行う方法を知りたいです。これら2つのファイルはパラメータとして提供されます。
#!/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
これにより、同じ比較製品を持つすべての製品が提供されます。例えば
$: cat out.txt
product1;comp1
product2;comp1
product3;comp1
私は間違いなくcompファイルの1行を正しく読み取っていません。私が何を間違っているのでしょうか?一行を読む方法?
答え1
Bashでこれを本当に行うには、-u fd
番号付きストリームを使用して2つのファイルを同時に読み取るオプションを使用することをお勧めします。
while read -r -u3 product; read -r -u4 comp; do
printf '%s;%s\n' "$product" "$comp"
done 3<products.txt 4<comps.txt
ただし、paste
ユーティリティを使用できます
paste -d\; products.txt comps.txt