반응형
[log_viewer.sh의 목적]
로그들만 모아놓은 파일 source.txt와 로그 내용이 담겨있는 log_list.h 에 있는 내용을 합쳐서 보여주자.
[예시]
input file : source.txt
mc.cpp MC_LOG( LOG_INFO, "information" );
mc.cpp MC_LOG( LOG_INFO, MC_001 );
data file : log_list.h
#define MC_001 "THIS IS BASH SCRIPT."
output
./log_viewer.sh -f source.txt -s "LOG_INFO,"
f option - input file name
input file : source.txt
s option - search string
searh_str : LOG_INFO,
mc.cpp : "information"
mc.cpp : "THIS IS BASH SCRIPT."
#!/bin/bash
# 뒤의 콜론(:)이 있으면 값을 갖고, 콜론이 없으면 값을 가지지 않는다.
options='f:hs:'
# help 함수, 호출되면 echo로 옵션내용을 보여준다.
show_help()
{
echo "[HELP]"
echo "OPTION"
echo "-f : input file name"
echo "-h : help"
echo "-s : search string"
}
# options 처리하는 루프, 옵션의 값은 $OPTARG로 받아진다.
# getopts를 사용하게 되면 옵션들을 처리할 수 있다.
while getopts $options option
do
case $option in
f) echo "f option - input file name"
echo "input file : $OPTARG"
input_file=$OPTARG
;;
h) echo "h option - help message"
show_help
;;
s) echo "s option - search string"
echo "searh_str : $OPTARG"
search_str=$OPTARG
;;
\?) echo "usage: command [-f] [-s] args [-h]."
;;
esac
done
# for문을 돌릴 때 delimiter를 \n으로 한 것이다.
IFS=$'\n'
# 예외처리, test -e는 파일이 있는지 확인하는 것이다.
if test -e $input_file
then
echo "You must input file!"
exit
fi
# option에서 받은 file을 한줄씩 확인하여 LOG 포멧인지 아닌지 확인 후 정리한다.
for line in `cat $input_file`
do
source_file=`echo $line | awk -F':' '{print $1}'`
if [[ $line != *"$search_str"* ]]
then
continue
fi
loglist=`echo $line | awk -F"$search_str" '{print $2}' | awk -F'[,)]' '{print $1}' | tr -d ' '`
if [[ $loglist == "MC"* ]]
then
content=`cat log_list.h | grep -P "$loglist[\t ]" | awk -F'"' '{print $2}' | cut -c 1-`
else
content=$loglist
fi
echo "$source_file : $content"
done
반응형
'장인으로의 여정' 카테고리의 다른 글
[linux] cut (0) | 2016.02.22 |
---|---|
[linux] awk (0) | 2016.01.27 |
[linux command] xxd (0) | 2016.01.21 |
댓글