복잡한 쉘 스크립트 수식.. awk
글쓴이: eastcirclek / 작성시간: 금, 2010/12/10 - 9:53오전
hosts="$(awk ' /^[:blank:]*$/ { next } /^[:blank:]*#/ { next } /^\w+[:blank:]*#/ { hosts[$1]=1; next } /^\w+[:blank:]*$/ { hosts[$1]=1; next } // { print "bad line in " FILENAME ": " $0 >"/dev/stderr"; next } END { for (host in hosts) { print host } }' \ instances/$inst/*.hosts)"
./instances/$inst/ 밑에 있는 모든 hosts file로부터 hostname records들을 읽어오는 쉘스크립트입니다.
예를 들어 아래와 같이 두 개의 서버가 있을 때, hostname은 보통 aaa, bbb를 말하지않나요?
aaa.uuu.ac.kr
bbb.uuu.ac.kr
shell에서 hostname이라고 쳐봐도 aaa, bbb 라고 각각 나오는데..
aaa, bbb를 hostname으로 적으니까 badline이라는 message가 계속 떠서
shell script를 직접 들여다 보고 있는데,
shell script를 잘몰라서 어떤 형식을 얘기하는 건지 잘 모르겠네요 T.T
어떤 형식의 hostname을 받으면 에러가 나는지 명시해놓은 것 같은데.. 고수분들 힌트좀 주세요!
Forums:
자문자답..
hostname을 쳤을 경우에 인식을 못한 것은
[:blank:] 나 \w 같은 pattern을 mawk가 인식을 못해서 그런 것입니다.
awk와 its variant에 대한 얘기는 아래 링크를 참조 하세요.
http://ubuntuforums.org/showthread.php?t=619985
저같은 경우에는
awk가 alternatives로 mawk로 링크가 걸려 있었네요.
(Ubuntu 사용 중)
sudo update-alternatives --set awk /usr/bin/gawk
라고 치시면 저런 패턴이 인식 안되었던 문제는 해결 됩니다.
(gawk가 안깔려 있으면 apt-get으로 설치 하시면 됩니다.)
댓글 달기