2011-12-29 4 views
1

파일을 한 줄씩 (헤더 무시) 통과시키고 각 줄의 시작 부분에서 파일 이름을 추출한 다음 파일을 찾는 방법을 사용하는 bash 스크립트를 작성하려고합니다. 이 이름을 한 디렉토리에 저장하고 다른 디렉토리로 이동합니다. 수백 개의 파일을 반복적으로 처리하고 백만 개 이상의 개별 파일을 옮깁니다. 파일의 샘플은 다음과 같습니다BASH 쉘 스크립팅 파일 구문 분석 [newbie]

ImageFileName Left_Edge_Longitude Right_Edge_Longitude Top_Edge_Latitude Bottom_Edge_Latitude 

21088_82092.jpg: -122.08007812500000 -122.07733154296875 41.33763821961143 41.33557596965434 

21088_82093.jpg: -122.08007812500000 -122.07733154296875 41.33970040427444 41.33763821961143 

21088_82094.jpg: -122.08007812500000 -122.07733154296875 41.34176252364274 41.33970040427444 

내가 첫 번째 라인을 무시하고 다음 변수로 21088_82092.jpg 잡고 싶습니다. 파일 이름은 항상 같은 길이가 아닐 수도 있지만 항상 형식이됩니다. digits_digits.jpg

효율적인 접근 방법에 대한 도움을 주시면 감사하겠습니다.

+0

게시물을 편집하여 지금까지 시도한 내용을 표시하고 오류 출력을 포함하십시오. 이런 질문은 매주 거의 물어봐야하므로 여기에서 검색해보십시오. 행운을 빕니다. – shellter

답변

0

이것은 당신이 시작할 수 있어야합니다

$ tail -n +2 input | cut -f 1 -d: | while read file; do test -f $dir/$file && mv -v $dir/$file $destination; done 
+0

위대한, 내 요구에 완벽하게 작동합니다. – user1120422

0

당신은 같은 것을 할 단순히 스크립트를 실행하는 스크립트를 구성 할 수 있습니다. (

pax:~$ cat qq.in 
ImageFileName  Left_Edge_Longitude Right_Edge_Longitude 
21088_82092.jpg: -122.08007812500000 -122.07733154296875 
21088_82093.jpg: -122.08007812500000 -122.07733154296875 
21088_82094.jpg: -122.08007812500000 -122.07733154296875 

pax:~$ awk -F: '/^[0-9]+_[0-9]+.jpg:/ { 
     printf "cp /srcdir/%s /dstdir\n",$1 
    } {}' qq.in 

cp /srcdir/21088_82092.jpg /dstdir 
cp /srcdir/21088_82093.jpg /dstdir 
cp /srcdir/21088_82094.jpg /dstdir 

당신은 그 스크립트의 출력을 캡처 : 다음 명령은 당신이 한 곳에서 다른 곳으로 파일을 복사하는 스크립트를 제공하지만, 당신은 단순히 awk 출력을 변경하여 스크립트 생성 더 복잡 할 수 있습니다 마지막 세 줄)을 다른 파일에 복사하면 그 파일은 실제 사본을 작성하는 스크립트입니다.

+0

또는 일단 스크립트가'sh'로 파이프되면, 원하는대로 할 것입니다. –

+0

콜론을 분리하기 위해'awk -F :'를 사용하면 단순화 할 수 있으며,'$ 1'은 필요한 파일 이름이됩니다. –

+0

좋은 사람, @ 조나단, 맞게 편집. – paxdiablo