#!/usr/bin/env bash createScoreboard() { NAME="$1" FILE="$2" WAR_ID="$3" KILL=0 FF=0 REVIVE=0 DEATH=0 RESPAWN=0 FLAG=0 FRACTION= #escape '[' -> somehow escapes all special chars, hah? ESC_NAME=$(echo "$NAME" | sed -r 's/[\[]+/\\[/g') while IFS= read -r line; do case "$line" in *\(WEST\)[" "]von:[" "]${ESC_NAME}[" "]\(EAST\)* | *\(EAST\)[" "]von:[" "]${ESC_NAME}[" "]\(WEST\)*) ((KILL++)) ;; *\(EAST\)[" "]von:[" "]${ESC_NAME}[" "]\(EAST\)* | *\(WEST\)[" "]von:[" "]${ESC_NAME}[" "]\(WEST\)*) ((FF++)) ;; *\(EAST\)[" "]wurde[" "]von[" "]${ESC_NAME}[" "]\(EAST\)[" "]wiederbelebt* | *\(WEST\)[" "]wurde[" "]von[" "]${ESC_NAME}[" "]\(WEST\)[" "]wiederbelebt*) ((REVIVE++)) ;; *${ESC_NAME}[" "]*von:*) ((DEATH++)) ;; *Flagge[" "]erobert[" "]von[" "]${ESC_NAME}* | *Flagge[" "]gesichert[" "]von[" "]${ESC_NAME}*) ((FLAG++)) ;; *Spieler:*${ESC_NAME}*) ((RESPAWN++)) ;; esac if [[ -z ${FRACTION} && ( "$line" == *${ESC_NAME}[" "]\(WEST\)* || "$line" == *${ESC_NAME}[" "]\(NATO\)* ) ]]; then FRACTION="BLUFOR" fi if [[ -z ${FRACTION} && ( "$line" == *${ESC_NAME}[" "]\(EAST\)* || "$line" == *${ESC_NAME}[" "]\(CSAT\)* ) ]]; then FRACTION="OPFOR" fi done < <(grep -- "${ESC_NAME}" ${FILE}) printf "\t{\"name\":\"$NAME\", \"fraction\":\"$FRACTION\", \"kill\":${KILL}, \"friendlyFire\":${FF}, \"revive\":${REVIVE}, \"death\":${DEATH}, \"respawn\":${RESPAWN}, \"flagTouch\":${FLAG}, \"warId\":\"${WAR_ID}\"} " if [[ -z ${4} ]]; then printf ",\n" else printf "\n" fi } FILE="$1/war.log" WAR_ID="$2" PLAYERS=() while IFS='' read -r line || [[ -n "$line" ]]; do if [[ -n $line ]]; then case "$line" in *"TFAR_RadioRequestEvent"*) RES=$(echo "$(grep -oP ':[0-9]+\s\(\K.*?(?=\)\sREMOTE)' <<< "$line")") ;; *"Respawn"*) RES=$(echo "$(grep -oP '\|\|\sSpieler:\s\K.*?(?=\s-\sKosten:)' <<< "$line")") ;; *"Abschuss"*) RES=$(echo "$(grep -oP '\|\|\s\K.*?(?=\s\((EAST|WEST|CIV))' <<< "$line")") RES1=$(echo "$(grep -oP 'von:\s\K.*?(?=\s\((EAST|WEST|CIV))' <<< "$line")") ;; esac if [[ $RES != *"Error: No unit"* && $RES1 != *"Error: No unit"* ]]; then if [[ -n $RES && " ${PLAYERS[*]} " != *" $RES "* ]]; then PLAYERS+=("$RES") fi if [[ -n $RES1 && " ${PLAYERS[*]} " != *" $RES1 "* ]]; then PLAYERS+=("$RES1") fi fi fi done < ${FILE} echo "[" for ((i=0; i<${#PLAYERS[*]}; i++)); do if [[ "$((i+1))" -eq "${#PLAYERS[*]}" ]]; then last="true" fi createScoreboard "${PLAYERS[i]}" ${FILE} ${WAR_ID} ${last} done echo "]"