길이가 같은 두 개의 텍스트 파일이 순서대로 정렬되어 있습니다. 하나는 제품이고 다른 하나는 제품 비교입니다. 각 행의 출력이 "제품; 비교"가 되기를 원합니다. 예, 스프레드시트에 넣고 csv로 내보낼 수 있지만 bash에서 이 작업을 수행하는 방법을 알고 싶습니다. 이 두 파일은 매개변수로 제공됩니다.
#!/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
Bash에서 이 작업을 정말로 수행하려면 -u fd
번호가 지정된 스트림을 사용하여 두 파일을 동시에 읽는 옵션을 사용하는 것이 좋습니다.
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