변환 목록을 사용하여 한 목록을 다른 목록으로 변환하려고 하는데 변환 목록에는 여러 가지 의미가 있어서 이를 처리하는 방법을 잘 모르겠습니다. 예를 들어, 숫자만 포함된 다음 목록이 있습니다.
1 4
2 5
3 6
5 1
변환(1 --> apple 등)을 포함하는 두 번째 목록이 있습니다.
1 apple
2 blueberry
2 banana
3 orange
4 pear
5 cherry
6 kiwi
6 mango
두 번째 변환 목록을 사용하여 숫자 목록을 과일 목록으로 변경하고 싶습니다. 이것이 내가 원하는 결과입니다:
apple pear
blueberry cherry
banana cherry
orange kiwi
orange mango
cherry apple
"2"에는 블루베리와 바나나가 모두 포함되어 있으므로 원래 행 대신 두 개의 행이 표시됩니다. bash로 이 변환이 가능합니까?
답변1
#!/bin/bash
while read index fruit
do
data[$index]="${data[index]} $fruit"
done < fruit.txt
while read one two
do
for fruit1 in ${data[$one]}
do
for fruit2 in ${data[$two]}
do
echo $fruit1 $fruit2
done
done
done < list.txt
작동 방식은 다음과 같습니다. 먼저 fruit.txt
변환( )이 포함된 파일을 배열로 읽어옵니다 data
. 다음으로 두 개의 숫자 열()이 포함된 파일을 읽고 list.txt
이 숫자를 사용하여 배열에서 과일을 찾습니다 data
. 각 항목에는 두 가지 이상의 과일 유형이 포함될 수 있으므로 모든 항목을 반복합니다.