for 조건에 2개의 변수를 사용해야 합니다. 예를 들어,
cat days
01072017
02072017
03072017
cat hours
00:00
01:00
02:00
03:00
내 쉘 스크립트 예
for i in `cat days` & j in `cat hours`
do
cat file | grep $i $j >data-$i-$j
done
3일 * 4시간 = 12개 파일의 출력을 원하고 해당 데이터-일-시간으로 리디렉션합니다.
답변1
이러한 유형의 문제에 대한 표준 솔루션은 두 개의 루프를 만드는 것입니다.
for i in $(<days); do
for j in $(<hours); do
grep "$i $j" file > data-"$i-$j"
done
done
명령 대체를 위해 백틱을 변경하고 $()
데드 캣을 제거하고 큰따옴표를 추가했습니다.
답변2
중첩된 for 루프를 사용해야 합니다.
for i in `cat days`
do
for j in `cat hours`
do
cat file | grep "$i $j" >data-${i}-${j}
done
done
답변3
이 한 줄 명령을 사용하여 다중 루프를 실행할 수 있습니다. 예를 들어 다른 서비스 매개변수를 사용하여 다른 호스트에서 서비스를 다시 시작해야 합니다. "나"호스트 ID 및"제이"서비스 이름 매개변수의 경우
for i in 1 2 3 4;do ssh host$i 'for j in A B C D; do sudo systemctl restart service_$j; done'; done
노트:너는 변해야 해"나"그리고"제이"값이 요구 사항과 일치합니다.