중첩된 for 루프에서 중복 출력 얻기

중첩된 for 루프에서 중복 출력 얻기
t1=`cat final-md5sum | awk '{print $3}'`
t2=`cat final-md5sum | awk '{print $5}'`

for ip in $t1; do
        for  path in $t2; do
        echo "Node Name: " $ip "| Out-Of-Sync File Details: " $path `ssh root@$ip stat -c%y $path | cut -d'.' -f1`
        done
done

콘텐츠 final-md5sum:

$ cat final-md5sum
Node Name: 192.168.1.2 Out-ofSync-Filename: /home/user1/file1
Node Name: 192.168.1.3 Out-ofSync-Filename: /home/user3/file4

내 현재 출력:

Node Name:  192.168.1.2 | Out-Of-Sync File Details:  /home/user1/file1 2021-07-19 19:25:37
Node Name:  192.168.1.2 | Out-Of-Sync File Details:  /home/user1/file1 2021-07-19 19:25:37
Node Name:  192.168.1.3 | Out-Of-Sync File Details:  /home/user3/file4 2021-07-19 19:14:09
Node Name:  192.168.1.3 | Out-Of-Sync File Details:  /home/user3/file4 2021-07-19 19:14:09

예상 출력:

Node Name:  192.168.1.2 | Out-Of-Sync File Details:  /home/user1/file1 2021-07-19 19:25:37
Node Name:  192.168.1.3 | Out-Of-Sync File Details:  /home/user3/file4 2021-07-19 19:14:09

출력에 중복된 값이 나타납니다. 내가 여기서 뭘 잘못하고 있는 걸까?

답변1

중첩 루프를 사용하고 있기 때문에 중복이 발생하므로 내부 루프는 각 외부 루프에 대해 두 번 실행됩니다(두 개의 행이 있으므로). 나는 당신이 무엇을 기대했는지 잘 이해하지 못합니다. 간단한 해결책은 두 개의 루프를 사용하지 않는 것입니다.

awk '{print $3, $5}' final-md5sum | 
    while read -r ip path; do 
        echo "Node Name: " $ip "| Out-Of-Sync File Details: " $path `ssh root@$ip stat -c%y $path | cut -d'.' -f1`
    done

아니면 더 명확하다고 생각합니다.

awk '{print $3, $5}' final-md5sum | 
    while read -r ip path; do 
        sshOutput=$(ssh root@"$ip" stat -c%y "$path" | cut -d'.' -f1)
        echo "Node Name: $ip | Out-Of-Sync File Details: $path $sshOutput"
    done

관련 정보