[완료]c shell 에서 문자 처리. 문자 따오기. 방법좀

chojg711의 이미지

답글달아주셔서 대단히 감사합니다.
여러분들 덕분에 굉장히 많은것들 배웠습니다. ^^

다음과 같은 경우입니다.
bash shell을 이용해서

AAA=2006060100
middle=${AAA:0:8}
echo $middle

이렇게 해주면 20060601 이라고 middle 에 20060601 이 저장되잖아요..

이것처럼 csh script로 원하는 부분에서부터 문자를 잘라서 변수에 저장할려면 어떻게 해야하나요...

죄송합니다... 부탁드리겠습니다.

slc1의 이미지

set AAA="2006060100"
set middle=`echo $AAA|awk '{for(i=1;i<=length($0);i++) if(i<=8) O=sprintf("%s%s",O,substr($1,i,1));print O}'`
echo $middle

slc1의 이미지

첨부 참조하세요.

pung96의 이미지

awk에도 substr함수가 있습니다.

slc1의 이미지

set AAA="2006060100"
set middle=`echo $AAA|awk '{print substr($0,1,8)}'`
echo $middle

pung96의 이미지

갑자기 든 생각인데 echo 에 pipe까지 쓰는건 아까운것 같습니다.
set middle=`awk -v a=$AAA 'BEGIN{print substr(a,1,8)}'`
정도..

slc1의 이미지

오호라~ 좋고..
한수 배웁니다.

slc1의 이미지

awk의 -v option은 solaris의 /usr/bin/awk에서는 지원되지 않고,,
/usr/xpg4/bin/awk 혹은 nawk를 써야하네요..
호환성이 조금은 떨어지게 되는군요..

pung96의 이미지

사실은 저도 -v 옵션보다는

set middle=`awk 'BEGIN{print substr("'$AAA'",1,8)}'`
형태로 많이쓰는데.. 가독성이 좋자 않아서 -v옵션을 쓰는것이 어떨까 생각해봤습니다.

경우에 따라 다음과 같이 쓰기도 합니다.
set middle=`awk 'BEGIN{print substr(\042'$AAA'\042,1,8)}'`

이경우는 solaris에서 어떻게 작동하나요? solaris는 안써봐서 잘 모르겠네요.

추가.. 생각해 보니 일반적이지는 않지만 이경우에는
awk "BEGIN{print substr($AAA,1,5)}"
로 써도 되겠군요

ㅡ,.ㅡ;;의 이미지

cut 도 있음..
----------------------------------------------------------------------------
C Library Development Project


----------------------------------------------------------------------------