Попробуйте:
#!/usr/bin/awk
{
line = ""
gsub("[{}\x22]", "", $0)
f=split($0, a, "[:,]")
for (i=1;i<=f;i++)
if (a[i] == "Type")
file = a[++i]
else
line = line sprintf("%-15s",a[i])
print line > file ".fixed.out"
}
Я сделал предположения на основе предоставленных образцов данных. Есть много основанных на этих предположениях, которые, возможно, придется изменить, если данные сильно отличаются от того, что вы показали. В частности, этот сценарий не будет работать должным образом, если значения данных или имена полей содержат двоеточия, запятые, кавычки или фигурные скобки. Если это проблема, это одна из основных причин, по которой следует использовать правильный анализатор JSON. Если бы это было мое задание, я бы настойчиво отодвинулся в этом вопросе, чтобы получить разрешение на использование соответствующих инструментов.
Это выводит строки с типом «Mail» в файл с именем «Mail.fixed.out» и типом «Chat» в «Chat.fixed.out» и т. Д.
Имя поля «Тип» и значение поля («Почта» и т. Д.) Не выводятся как часть содержимого. Это можно изменить.
В противном случае выводятся как имена, так и значения полей. Это можно изменить.
Все поля ширины фиксированы в 15 символов, дополнены пробелами, без разделителей. Ширина поля может быть изменена и т. Д.
Дайте мне знать, насколько это близко к тому, что вы ищете, и я могу внести некоторые коррективы.