스크립트 고수님께 질문 드립니다!

janues의 이미지

한 5년동안 업계를 떠나 노량진 수산시장에서 박스 나르다 돌아왔는데
머리가 생선대가리 마냥 굳었나 봅니다!
혼자 끙끙 거리다 못풀어서 질문 올려봅니다!!! 고수님들 신의 한수 부탁합니다!
질문 () {
test1 55%, test2 35%, test3 78%...... test8 9%
이런 데이터 값을 가진 파일이 있습니다!
cat 과 awk로 test와 숫자 필드는 분리됩니다!
요놈들을 아래처럼 하기가 쉽지 않네요!
55% [####### ] test1
35% [#### ] test2
78% [########### ] test3
가능한 방법 부탁드립니다!
}
저 프로그레스 바를 어떻게 구현해야 하는지 도통 모르겠습니다.
환경은 AIX 5.3, ksh, 현재 환경을 바꾸면 안되서 shell script로만
작업해야 합니다! X환경이라면 쉬울수 있는데 aix에는 dialog 조차
없고 아주 난감합니다
제 머리로는 tput으로 구현하면 될거 같아서 큰소리 쳤는데 ...
안되네요....
고수님들의 신의 한수 부탁합니다!!!!

ps. 스맛폰으로 글 작성해보니 성격 드러워질것 같아서 앞으로는
컴터 이용해야겠습니다!

janues의 이미지

35% [###### ___________] test1
55% [########__________] test2
언더 바 (_) 는 실제 공백인데 제 폰으로 글쓰니 공백이 인식이 안되는 것
같아 다시 정정합니다.

ymir의 이미지

sh 없는 시스템은 없을테니.. 그냥 되는 대로 적어 봤습니다..
신의 한 수는 다음 분이..

$ cat run.sh
#!/bin/sh
 
IN="test1 55%, test2 35%, test3 78%, test8 9%"
 
OIFS=$IFS
IFS=,
 
for pair in $IN
do
        IFS=$OIFS
 
        set -a $pair
        p_value=`echo $2 | sed -e 's/%//'`
        s_count=`expr $p_value / 5`
        w_count=`expr 20 - $s_count`
 
        echo -n "$2 ["
        for i in `seq 1 $s_count`; do echo -n "#"; done
        for i in `seq 1 $w_count`; do echo -n " "; done
        echo "] $1"
 
        OIFS=$IFS
        IFS=,
done
 
IFS=$OIFS
 
exit 0;
 
$ ./run.sh
55% [###########         ] test1
35% [#######             ] test2
78% [###############     ] test3
9% [#                   ] test8

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

janues의 이미지

감사합니다.
원격으로 집에 있는 리눅스 박스에 접속하여 테스트 해본 결과 만족할 만한 결과물을 얻을 수 있었습니다.
그런데 aix에서는 seq 명령어를 찾을수 없네요.
devel_1:root ] / >which seq
which: 0652-141 There is no seq in /usr/bin /etc /usr/sbin /usr/ucb //bin /usr/bin/X11 /sbin /usr/sbin /usr/bin /usr/lib/vxvm/bin /opt/VRTSvxfs/sbin /opt/VRTSvcs/bin /opt/VRTS/bin /opt/VRTSvcs/rac/bin /opt/VRTSob/bin /usr/vac/bin /usr/java5_64/bin /usr/local/bin.
그래도 일단 산 하나는 넘었으니 이제 다른 산도 넘어 보겠습니다.
자꾸 시도하다보면 넘어지겠지 말입니다... 이제 다른 신의 한수 찾아보겠습니다. 감사합니다.

ymir의 이미지

seq 는 첫번째 숫자를 증가 또는 감소시켜서 두번째 숫자와 같을 때까지 표시해 주는 명령입니다.
첨에는 for i in {1..$s_count} 로 만들었는데, 돌려보니 이게 안 먹히길래 seq 로 바꿨습니다.

그냥 스크립트로 seq 하나 만드시거나, 다른 형태의 loop 로 바꾸시면 될 것 같네요.

while [ $s_count != 0 ] ; do echo -n "#"; s_count=`expr $s_count - 1`; done

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

janues의 이미지

제가 짠 스크립트보다 훨 간결한 표현 방식이네요. 기꺼이 참고하겠습니다!!
사실 각 연구 성과를 텍스트로 저장하고 이걸 미국인 수퍼바이저가 체크하는
업무인데 꼭 위와같은 방식으로 구현해서 다시 시스템 레포트를 매일 자기에게
제출하라더라구요.. 아니 MS제품도 좋은게 많은데 굳이 CLI로 표현하라니..
어째든 이제 마무리가 되었습니다. 고맙습니다!!
진심으로 감사합니다!!