Skip to content

Instantly share code, notes, and snippets.

@mathew-fleisch
Created January 9, 2020 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mathew-fleisch/38eb1df3d7a6e36f27e62cab71b361d2 to your computer and use it in GitHub Desktop.
Save mathew-fleisch/38eb1df3d7a6e36f27e62cab71b361d2 to your computer and use it in GitHub Desktop.
parse log to csv
# Provided Input:
# logs = """
# timestamp="Wed Jun 19 09:35:36 PDT 2019" message="test 10" id=10 field_1="test 10" field_6="test 1"
# timestamp="Wed Jun 19 09:35:37 PDT 2019" message="test 4" id=4 field_2="test 4"
# timestamp="Wed Jun 19 09:35:38 PDT 2019" message="test 2" id=3 field_3="test 2" field_9="test 23"
# timestamp="Wed Jun 19 09:35:39 PDT 2019" message="test 3" id=2 field_4="test 3"
# timestamp="Wed Jun 19 09:35:40 PDT 2019" message="test 4" id=1 field_5="test 4"
# timestamp="Wed Jun 19 09:35:37 PDT 2019" message="test 5" id=5 field_3="test 10"
# timestamp="Wed Jun 19 09:35:40 PDT 2019" message="test 6" id=6 field_1="test 5"
# """
# Sample Output (csv ordering may vary):
# id,timestamp,message,field_1,field_2,field_3,field_4,field_5,field_6,field_9
# 1,"Wed Jun 19 09:35:40 PDT 2019","test 4",,,,,"test 4",,
# 2,"Wed Jun 19 09:35:39 PDT 2019","test 3",,,,"test 3",,,
# 3,"Wed Jun 19 09:35:38 PDT 2019","test 2",,,"test 2",,,,"test 23"
# 4,"Wed Jun 19 09:35:37 PDT 2019","test 4",,"test 4",,,,,
# 5,"Wed Jun 19 09:35:37 PDT 2019","test 5",,,"test 10",,,
# 6,"Wed Jun 19 09:35:40 PDT 2019","test 6","test 5",,,"test 5",,
# 10,"Wed Jun 19 09:35:36 PDT 2019","test 10","test 10",,,,,"test 1",
echo "id,timestamp,message,field_1,field_2,field_3,field_4,field_5,field_6,field_9"
while IFS= read -r log_id; do
timestamp=$(cat input.txt | grep "id=$log_id" | sed -e 's/.*timestamp=//' | awk -F\" '{print $2}')
message=$(cat input.txt | grep "id=$log_id" | sed -e 's/.*message=//' | awk -F\" '{print $2}')
field_1=$(cat input.txt | grep "id=$log_id" | grep "field_1=" | sed -e 's/.*field_1=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_2=$(cat input.txt | grep "id=$log_id" | grep "field_2=" | sed -e 's/.*field_2=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_3=$(cat input.txt | grep "id=$log_id" | grep "field_3=" | sed -e 's/.*field_3=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_4=$(cat input.txt | grep "id=$log_id" | grep "field_4=" | sed -e 's/.*field_4=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_5=$(cat input.txt | grep "id=$log_id" | grep "field_5=" | sed -e 's/.*field_5=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_6=$(cat input.txt | grep "id=$log_id" | grep "field_6=" | sed -e 's/.*field_6=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
field_9=$(cat input.txt | grep "id=$log_id" | grep "field_9=" | sed -e 's/.*field_9=//' | awk -F\" '{print $2}' | sed -e 's/\(.*\)/"\1"/')
echo "$log_id,\"$timestamp\",\"$message\",$field_1,$field_2,$field_3,$field_4,$field_5,$field_6,$field_9"
done <<< "$(cat input.txt | sed -e 's/.*id=//' | awk '{print $1}' | sort -n)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment