두 파일을 비교할 수 있는 Linux 스크립트를 원하고 비교 후에 뭔가를 표시해야 합니다.

두 파일을 비교할 수 있는 Linux 스크립트를 원하고 비교 후에 뭔가를 표시해야 합니다.

파일 1

products           total 
apple               6
yam                 5
fish                6
meat                3

파일 2

products           total 
apple               6
yam                 7
fish                3
meat                5

내가하고 싶은 일. 두 파일의 내용을 비교하는 스크립트를 원합니다. 파일 1의 제품과 파일의 제품을 일치시키고 총계를 비교해야 합니다. 파일 1의 총계가 파일 2의 총계보다 크면 일부 내용을 표시해야 합니다. 다른 것이 표시되지 않아야 하는 경우

내가 기대했던 것

file 1                               file 2                       the output of the script  

products           total        products           total              
apple               6            apple               6                 they are equal 
yam                 5            yam                 7                  file 2 is more
fish                6            fish                3                  file 1 is more
meat                3            meat                5                  file 2 is more  

답변1

귀하의 질문을 올바르게 이해한 경우:

파일이 탭으로 구분되어 있다고 가정하고 루프를 사용하여 요소의 모든 값을 저장한 다음 두 루프를 반복하여 비교합니다.

prods1=() #product names in file 1
tots1=() #totals in file 1

prods2=() #product names in file 2
tots2=() #totals in file 2


#read in the stored values
while IFS=\t read -r p t; do
    prods1+=("$p")
    tots1+=("$t")
done <<< file1

while IFS=\t read -r p t; do
    prods2+=("$p")
    tots2+=("$t")
done <<< file2

output=() #will store your output

for((i=0; i<${#tots1[@]};++i)); #you can set i to 1 if you want to skip the headers
do
    #check if the values are equivalent
    if ((${tots1[i]} == ${tots2[i]}));
        output+="They are equal"

        #ADD THE REST OF THE COMPARISONS HERE
    fi
done

그 후에 배열에는 output원하는 출력이 포함되며, 콘솔이나 원하는 형식의 파일로 인쇄할 수 있습니다. :)

관련 정보