![쉘에서 while 루프를 사용하여 한 파일을 읽고 다른 파일로 리디렉션하는 방법](https://linux55.com/image/163533/%EC%89%98%EC%97%90%EC%84%9C%20while%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%BD%EA%B3%A0%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
unimplemented.txt
다음 이름의 파일이 있습니다 .
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx,./TDM/SDH.xls
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDH.xls
while 루프를 사용하여 위 파일을 읽고 다음을 /TDM/SDH_check.xls
포함하는 출력 파일을 생성하려면 어떻게 해야 합니까?
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx
이렇게 해봤는데 무한루프에 빠지네요
while IFS="," read dummy casename tpname < "unimplemented.txt"
do
echo "$casename" > basename $tpname|sed -e 's/\..\+$//'
done
답변1
스크립트에 몇 가지 문제가 있는 것 같습니다.
너는 왜
read dummy casename tpname
? 이 줄에서 읽기는 3개의 필드를 기다리고 있지만 2개의 필드만 필요합니다.을 작성하면
echo "$casename" > basename $tpname|sed -e 's/\..\+$//'
다음이 수행됩니다.- (대신 )
$casename
에 에코됩니다 .basename
$basename
sed
echo 출력에 대체를 적용하면 됩니다 . 괜찮습니다.
- (대신 )
사용할
>
때마다 덮어쓰게 됩니다echo
. 추가하려면>>
.
다음은 나에게 맞는 것 같지만 이것이 원하는 것인지 확실하지 않습니다.
gcolangelo@NEO-L196:/tmp/pouet$ cat unimplemented.txt
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx,./TDM/SDH.xls
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDH.xls
verify-sdh-t2-satop-traffic-over-mpls-1for1-xxx,./TDM/SDG.xls
verify-sdh-t2-satop-traffic-over-mpls-1plus1-xxx,./TDM/SDG.xls
gcolangelo@NEO-L196:/tmp/pouet$ cat unimplemented.txt | while IFS=',' read casename tpname ; do echo "$casename"|sed -e 's/\..\+$//' >> $tpname ; done
gcolangelo@NEO-L196:/tmp/pouet$ cat TDM/SDH.xls
verify-sdh-t1-satop-traffic-over-mpls-1for1-xxx
verify-sdh-t1-satop-traffic-over-mpls-1plus1-xxx
gcolangelo@NEO-L196:/tmp/pouet$ cat TDM/SDG.xls
verify-sdh-t2-satop-traffic-over-mpls-1for1-xxx
verify-sdh-t2-satop-traffic-over-mpls-1plus1-xxx