리눅스랑 맥에 기본적으로 깔려있는 awk랑 grep을 이용해서 파일 리스트를 원하는 형태로 조작하는 연습을 하며 이 두 프로그램에 대해 알아보자. 먼저 주어진 리스트는 다음과 같다.
여기서 raw라는 확장자를 가진 파일만 추려서 확장자를 떼고, rawToROOT라는 실행파일의 인자로 넘겨주는 형태로 rawToROOT파일을 실행시키는 문장을 만들려고 한다. 물론 아무생각 없이 ls > run.sh 로 ls 내용을 run.sh에 입력한다음 vi를 이용해서 손으로 하나하나 혹은 매크로로 입력해주는 방법도 있다. 그게 편한 사람은 그걸 그냥 써도 된다. 일단 해보고 생각해보자.
먼저 raw 확장자를 가진 파일만 추려내보자.
ls | grep .raw$
위 명령어는 ls에서 나온 결과에서 “.raw”로 끝나는 문자를 가진 결과만 출력한다. “$”가 문장의 끝을 의미한다. 결과는 다음과 같다.
이제 이 결과에서 “.raw”확장자를 가진 파일만 추려서 .raw를 떼버리고 앞쪽에 “./rawToROOT ”를 붙이면 완성이다.
ls | grep .raw$ | awk -F.raw ‘{printf(“./rawToROOT %s\n”, $1)}’
끝! awk를 이용해서 “ls | grep .raw$”에서 나온 결과를 편집해서 출력한 것이다. awk의 “-F.raw”옵션은 “.raw”를 기준으로 결과에 있는 문자열을 자른다. 순서대로 자르는 기준의 앞쪽 문자열은 $1에, 뒷쪽 문자열은 $2에 할당된다. 자르는 기준의 문자가 “.”이나 “,”여서 잘리는 위치가 여러군대라면 순서대로 “$숫자”형태로 저장된다. (10 이상까지 되는지는 모르겠다. 한번 해보길….)
그 다음 자른 문자를 printf를 이용해서 “./rawToROOT ”라는 문자를 붙여서 출력한다. printf 문법은 다들 아시시라 생각하고 생략한다.
이제 적당히 뒤에 “> run.sh”를 붙여서 결과를 파일로 출력한다음 실행시켜주면 끝!