2016-05-19 2 views
2

У меня есть результат запроса, который я запускал на elasticsearch, который я хочу проанализировать, чтобы предоставить csv с двумя записями в строке.Sed/awk/tr - удалить многострочную строку и формат

Выход образца Я работаю с это:

 { 
    "_index": "file__mdata", 
    "_type": "assets", 
    "_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac", 
    "_version": 6, 
    "found": true, 
    "_source": { 
     "meta": { 
      "Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35", 
     } 
    } 
    }, 
    { 
    "_index": "file__mdata", 
    "_type": "assets", 
    "_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592", 
    "_version": 8, 
    "found": true, 
    "_source": { 
     "meta": { 
      "Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3", 
     } 
    } 
    } 

План закончить следующим:

"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac","Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35" 

Так что я должен запустить вывод через Grep -a 5, отфильтруйте внешние области перед тем, как проложить поток через sed с помощью флага s на линию, чтобы удалить каждую линию между ними (используя regEx в строке версии). Выход в конечном итоге выглядит как:

  "_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac", 




      "Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35", 





    "_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592", 




      "Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3", 

Попытка запустить тр удалить пустое пространство, кажется, не имеют желаемого эффекта, и единственный выход, я могу показаться, чтобы достичь местами все остального текста на одной строке.

Я чувствую, что многотрубный подход sed запутан, и должен быть более прямой подход, который может обрабатывать многострочный вход. Это может быть достигнуто в notepad ++, например, так что я надеюсь, что я могу закончить сценарий, который я могу запустить на очень большом выходе, где текстовый редактор будет изо всех сил открывать.

Любые предложения? извините, если это все очень прямо для некоторых из вас, но я потерян в сорняках.

ответ

1

Если sampleInput это тестовый файл с входом, то это:

awk '/"_id"/ {printf "%s", $0} /"Item Id"/ {printf "%s\n", $0}' sampleInput 

генерирует это:

"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac",   "Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35", 
"_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592",   "Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3", 
+0

Для надежности вы, вероятно, хотите подтянуть регулярные выражения, обнаруживая по крайней мере начало строки, как в ответе Эд. Например, '/^\ s *" _ id "/' уже улучшается. Я написал что-то простое, что было бы (1) работать и (2) быть легко понятным, так что вы могли бы легко настроить его. –

0
$ awk -F'^[[:space:]]+|,[[:space:]]*$' -v OFS=, '/"_id":/{id=$2} /"Item Id":/{print id, $2}' file 
"_id": "24607c5a-2c6g-416a-ab88-58fha56a34ac","Item Id": "dd0bd495-a4af-49c0-95e3-554097ed6a35" 
"_id": "fgtaf7g2-32b8-4278-8ca0-3bc0g30ae592","Item Id": "de2acr1d-5d1b-4171-85d7-d76adbf50cc3" 
Смежные вопросы