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