| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
어드민 손님
|
올려짐: 2007.4.20 금, 10:19 pm 주제: 쉘 스크립트 질문 |
|
|
안녕하세요. 쉘 스크립트 관련 질문 입니다.
내용을 설명 드리면 디렉토리에 파일명이 daily_070101, daily_070102,
daily_070103 ~ daily_070229..................
이런 식으로 날짜별로 파일이 나누어져 있습니다.
저는 이 파일들 중에 16일부터 ~ 다음달 15일까지(daily_070116 ~
daily_070215) 파일을 리스팅 하여
파일 내용을 모두 합쳐서 하나의 파일로 만들고 싶습니다.
파일1.
1
2
3
파일2.
4
5
6
결과파일
1
2
3
4
5
6
아무리 생각을 해봐도 원하는 날짜를 어떻게 리스팅 해야하며
어떻게 합쳐야 하는지 잘 모르겠습니다.
조언 부탁 드립니다.
감사합니다. |
|
| 위로 |
|
 |
truefeel 카페 관리자
가입: 2003년 7월 24일 올린 글: 1277 위치: 대한민국
|
올려짐: 2007.4.22 일, 1:00 am 주제: Re: 쉘 스크립트 (특정 기간의 파일만 리스팅) |
|
|
| 코드: |
LIST=`ls daily_*`
for f in $LIST
do
if [ "$f" \> "daily_070115" -a "$f" \< "daily_070216" ]; then
echo $f
fi
done
|
if문의 문자열 비교로도 가능합니다. 문자열 비교는 >= 나 <= 가 없습니다.
따라서 날짜를 하나더 작거나 크게 표시해야 합니다.
echo 대신에 cat을 이용하면 하나의 파일로 만들 수 있겠죠.
테스트는 안해본 스크립트입니다. |
|
| 위로 |
|
 |
어드민 손님
|
올려짐: 2007.4.25 수, 5:19 pm 주제: 쉘 스크립트 |
|
|
스크립트를 테스트해 보니
원하는 결과가 나오지 않습니다.
if문에서 비교가 되지 않고 디렉토리내 모든 파일이 리스트 되는데
if문 문자열 비교가 되나요?
= 은 되는거 같은데 >, < 는 안되네요..
답변 감사합니다. |
|
| 위로 |
|
 |
truefeel 카페 관리자
가입: 2003년 7월 24일 올린 글: 1277 위치: 대한민국
|
올려짐: 2007.4.25 수, 6:28 pm 주제: Re: 쉘 스크립트 (if문의 문자열 비교) |
|
|
| 어드민 씀: | 스크립트를 테스트해 보니
원하는 결과가 나오지 않습니다.
if문에서 비교가 되지 않고 디렉토리내 모든 파일이 리스트 되는데
if문 문자열 비교가 되나요?
= 은 되는거 같은데 >, < 는 안되네요..
답변 감사합니다. |
if문에서 문자열 비교됩니다.
> 나 < 앞에는 \ 를 넣으셨죠? 실행할 때 sh -x '파일명'으로 하면 간단한 디버깅이 가능합니다.
- 테스트한 과정들을 말씀해주시기 바랍니다.
- 그리고 해결되었다면, 어떻게 하니 결과를 얻었다라는 글을 올려주시면 다른 분에게 도움이 됩니다.
잘 안되면 테스트한 스크립트 올려주세요.
그럼 좋은 결과가 있으시길... |
|
| 위로 |
|
 |
어드민 손님
|
올려짐: 2007.4.26 목, 10:03 am 주제: 쉘스크립트 |
|
|
#!/bin/sh
LIST=`ls bk_*`
for f in $LIST
do
if [ "$f" \> "bk_070315" -a "$f" \< "bk_070416" ]; then
echo $f
fi
done
테스트 코드 입니다.
7번째 라인에서
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
이런 에러가 나네요...ㅜ.ㅜ
테스트 환경은 AIX/ksh 입니다. |
|
| 위로 |
|
 |
truefeel 카페 관리자
가입: 2003년 7월 24일 올린 글: 1277 위치: 대한민국
|
올려짐: 2007.4.26 목, 12:38 pm 주제: Re: 쉘스크립트 |
|
|
| 어드민 씀: | #!/bin/sh
LIST=`ls bk_*`
for f in $LIST
do
if [ "$f" \> "bk_070315" -a "$f" \< "bk_070416" ]; then
echo $f
fi
done
테스트 코드 입니다.
7번째 라인에서
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
이런 에러가 나네요...ㅜ.ㅜ
테스트 환경은 AIX/ksh 입니다. |
bash 와 GNU coreutils 기준으로 말씀드렸는데, ksh에 built-in된 test command에서는 < 나 > 가 안되니 에러가 발생하는 것 같네요.
1. ftp://alpha.gnu.org/gnu/coreutils/ 에서 coreutils을 받아서 컴파일 한후 test 와 [ 파일만 별도로 복사한 후 테스트를 해보시거나,
2. 아니면 if문의 문자열 비교 대신에 sed로 문자열을 걷어낸 후에 숫자만을 비교해볼 수도 있습니다.
NUM=`echo "bk_070315"|sed s/bk_//g`
이렇게 숫자만 빼낸 후, if에서 -lt, -gt 등으로 체크할 수도 있구요.
if문 만들 수 있으시겠죠? |
|
| 위로 |
|
 |
|