ネストされた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

ネストされたループを使用しているため、重複が発生するため、内部ループは各外部ループに対して2回実行されます(2つの行があるため)。私はあなたが期待したものをよく理解していません。簡単な解決策は、2つのループを使用しないことです。

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

おすすめ記事