여러 의미를 지닌 목록을 변환해 보세요

여러 의미를 지닌 목록을 변환해 보세요

변환 목록을 사용하여 한 목록을 다른 목록으로 변환하려고 하는데 변환 목록에는 여러 가지 의미가 있어서 이를 처리하는 방법을 잘 모르겠습니다. 예를 들어, 숫자만 포함된 다음 목록이 있습니다.

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. 각 항목에는 두 가지 이상의 과일 유형이 포함될 수 있으므로 모든 항목을 반복합니다.

관련 정보