我正在搜索的东西是Minecraft日志中的玩家死亡消息。
所以我的脚本正在观看Minecraft server.log并且我已经创建了一个包含所有可能的死亡消息的数组,但它只是不起作用,因为它输出日志中显示的行。
#!/bin/bash
serverlog=/home/skay/NewWorld/server.log
outputfile=/home/skay/website/log/playerstats.log
## File Creation!
if [ ! -f "$outputfile" ]; then
touch $outputfile
echo "file created"; else
echo "file already existed"
fi
echo "Starting Loop"
while true; do
index="0"
newline=`tail -n 1 "$serverlog"`
joined=`tail -n 1 $serverlog | grep "[INFO]" | grep "joined the game"`
left=`tail -n 1 $serverlog | grep "[INFO]" | grep "left the game"`
## Death Message Array
deathmsg=( "was squashed by a falling anvil"
"was pricked to death"
"walked into a cactus whilst trying to escape"
"was shot by arrow"
"drowned"
"blew up"
"was blown up by"
"hit the ground too hard"
"fell from a high place"
"fell off a ladder"
"fell off some vines"
"fell out of the water"
"fell into a patch of fire"
"fell into a patch of cacti"
"was doomed to fall"
"was shot off some vines by"
"was shot off a ladder by"
"was blown from a high place by"
"went up in flames"
"burned to death"
"was burnt to a crisp whilst fighting"
"walked into a fire whilst fighting"
"was slain by"
"was shot by"
"was fireballed by"
"was killed by"
"got finished off by"
"was slain by"
"tried to swim in lava"
"died"
"got finished off by"
"was slain by"
"was shot by"
"was killed by"
"was killed by magic"
"starved to death"
"suffocated in a wall"
"was killed while trying to hurt"
"fell out of the world"
"fell from a high place and fell out of the world"
"was knocked into the void by"
"withered away")
## Player Joined
if [ "$newline" != "$oldline" ]; then
if [ "$newline" == "$joined" ]; then
echo "$joined"
oldline="$newline"
fi
## Player Disconnected
if [ "$newline" == "$left" ]; then
echo "$left"
oldline="$newline"
fi
## Player Death Message
while [ "$index" -le "42" ]; do
death=`tail -n 1 $serverlog | grep "[INFO]" | grep "${deathmsg[$index]}"`
if [ "$newline" == "$death" ]; then
echo "$death"
oldline="$death"
fi
index=$[$index+1]
done
fi
done
server.log示例:
2013-07-21 00:38:36 [SEVERE] Reached end of stream for /79.97.91.46
2013-07-21 00:38:38 [INFO] Fenlig[/79.97.91.46:59709] logged in with entity id 880461 at (541.34081297678, 48.0, 463.3734054913931)
2013-07-21 00:38:38 [INFO] Fenlig joined the game
Player Fenlig login detected
2013-07-21 00:39:49 [INFO] Fenlig was doomed to fall
2013-07-21 00:39:57 [INFO] Fenlig lost connection: disconnect.quitting
2013-07-21 00:39:57 [INFO] Fenlig left the game
答案 0 :(得分:1)
答案 1 :(得分:0)
你曾经想过使用awk吗?把它写入parse_log.awk
{
/* only process [INFO] messages */
if ($3 == "[INFO]") {
rest_of_string = substr($0, index($0, $4));
/* logged in, and anything else you want to skip ... */
if ($5 == "logged") {
next;
}
/* joined ... */
if ($5 == "joined") {
print rest_of_string;
next;
}
/* left ... */
if ($5 == "left") {
print rest_of_string;
next;
}
/* otherwise death */
print rest_of_string;
}
}
然后在命令行上,你可以简单地运行这个
$ tail -n 1 -f /home/skay/website/log/playerstats.log | awk -f parse_log.awk>> /home/skay/website/log/playerstats.log
本质上,tail会一直跟踪日志(-f),然后将其传递给你的awk程序,如果它产生输出,则将其附加到你的文件