2012-01-10 5 views
1

을 주문하는 방법쉘 스크립트 - ... 일반적인 이름으로 모든 파일을 얻는다면, 그래서 쉘 스크립트가 얼마나 강력한 학습하고 그것을 사랑하지만이와 정말 힘든 시간을 겪고있어 그 파일

checkin.10 애프터 checkin.11 checkin.12

수 : 나는라는 이름으로 파일들을 가지고있다. 항상 # 일 것이고 순차적으로 올라갈 것입니다.

dir에서 모든 checkin. * 파일을 찾아 파일 이름에서 가장 높은 번호의 파일을 반환해야합니다. 그래서 위의 파일들에 대해서, 나는 'checkin.12'를 돌려 주어야 할 것입니다. 내 논리는 모든 체크 인. * 파일 이름을 가져 와서 반복하고 # 변수를 변수에 저장된 이전 파일의 #과 비교하는 것이 었습니다. 현재 파일의 #가 더 높으면 # 변수를 현재 파일 #으로 업데이트하고, 낮 으면 다음 파일로 이동합니다. 이 방법으로 나는 checkin.12가 가장 높은 #으로 돌아 왔고 내가 체크 인으로 할 필요가있는 것을 할 수있다. 이를 수행하는 더 좋은 방법이 있어야합니다. 다른 접근 방식의 예를 보여 줄 수 있기를 바랍니다.

답변

4
ls checkin.* | sort -t. -n | tail -1 
+0

오! 'sort' 나는 그것을 어떻게 놓쳤는가? 나는 지금 더러워. +1. 만약'head'를 쓰고 싶다면'ls checkin. * | sort -t. -rn | head -n + 1' 또는'head -n +1 <(sort -t. -rn <(ls checkin. *))'그러나 멋지게 선생님! –

+0

굉장합니다. 단지 굉장한. – user797963

+0

'sort' 명령에는 한계적인 속임수 (실제로는 감시와 부주의)가 있습니다. 첫 번째 필드를 숫자로 정렬합니다 (이름은 'checkin'이므로 항상 동일한 값과 0을 정렬합니다). 그런 다음 실제 숫자 접미어를 정렬합니다. 당신은 성능을 약간 향상시킬 수 있어야한다. (나는 그것을 측정 할 수 있을지 확신하지 못한다.)'sort -t '를 사용하면된다. -k 2n' (두 번째 열에서 숫자로 정렬). 이번에는 결과가 동일합니다. 때로는 운이 좋을 때도 있습니다. –