Created
January 9, 2020 19:09
-
-
Save mathew-fleisch/38eb1df3d7a6e36f27e62cab71b361d2 to your computer and use it in GitHub Desktop.
parse log to csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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