特定の値についてログ ファイル (またはファイル) を照会するスクリプトを作成しようとしています。指定された値を使用して、その行だけでなく、空白でない限りその周りのすべての行を出力します。
基本的に、次のように実行したいと思います。
logSearch.sh -f FilenameToSearch.log -s SearchTerm -b "20130323 12:00:00" e- "20130323 14:21:00"
FilenameToSearch.log には次の内容が含まれます。
03-10-2013 12:11:30
JunkData
JunkData
03-23-2013 12:00:00
JunkStill
Since
ValueLooking
ForIs
NotHere
03-23-2013 12:10:00
NotJunk
SearchTerm
ValueHere
NeedTo
GetAll
Yay
03-23-2013 12:10:30
BackToJunk
Blah
03-23-2013 12:11:00
SearchTerm
MorePrint
03-23-2013 15:10:00
SearchTerm
ButAfterGiven
Time
So
Junk
ログ ファイルを検索し、指定された日時の値の間で最初の検索語に一致するものを見つけます (これらはオプションです)。
したがって、次を返し、新しいファイルにパイプします。
03-23-2013 12:10:00
NotJunk
SearchTerm
ValueHere
NeedTo
GetAll
Yay
03-23-2013 12:11:00
SearchTerm
MorePrint
ここに基本的なコードがありますが、まだ実際にデータを処理することはできていません。私は一週間を通してこれに取り組み続け、日が進むにつれてさらに具体化しますが、あなたが持っているアイデアは(おそらくこれらのスクリプトを書くのが得意なので)役に立ちます
コード
#!/bin/bash -eu
sytax="Proper invocation is logSearch.sh -s search-term -f filename-directory [b - datetimevalue1] [e - datetimevalue2]";
necVal="Error. -s and -f need to be specified";
usage () { echo $sytax; exit 1;}
error () { echo $necVal; usage; exit 2;}
options='s:f:b:e:x'
while getopts $options option
do
case $option in
s)
searchFor=$OPTARG
;;
f)
inFilesLike=$OPTARG
;;
b)
betweenThis=$OPTARG
;;
e)
andThis=$OPTARG
;;
*)
usage;
;;
esac
done
shift $(($OPTIND - 1))
if [ -z ${searchFor:-} ] || [ -z ${inFilesLike:-} ]
then
error;
else
echo "Search for : " $searchFor;
echo "in files like: " $inFilesLike;
fi
if [ ! -z ${betweenThis:-} ]
then
echo "Starting search at first occurance of: " $betweenThis;
else
echo "No value to start search from. Beginning from the start of file(s).";
fi
if [ ! -z ${andThis:-} ]
then
echo "Ending search at first occurance of: " $andThis;
else
echo "No value to end search at. Will search to the end of file(s).";
fi
#BEGIN CODE TO SEARCH THROUGH $INFILESLIKE FILES FOR PARTICULAR VALUES