본문 바로가기
장인으로의 여정

[bash script] log_viewer.sh

by 유기농프로그래밍 2016. 1. 19.
반응형

[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."


Hello!


#!/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

댓글