2014-11-04 2 views
0

Я пытаюсь вырезать определенную строку из нескольких файлов. У меня около 300 файлов json.Команда Grep и cut в терминале шпатлевки

file structure: 
{ 
"FieldName1": "XXXX", 
"FieldName2": "1", 
"FieldName3": "XXX", 
"FieldName4": "XXX", 
"FieldName5": "1", 
. 
. 
. 
} 
, 

{ 
"FieldName1": "XXXX", 
"FieldName2": "2", 
"FieldName3": "XXX", 
"FieldName4": "XXX", 
"FieldName5": "2", 
. 
. 
. 
} 

некоторые файлы записываются в одну строку:

{"FieldName1": "XXXX", "FieldName2": "3", "FieldName3": "XXX", "FieldName4": "XXX", "FieldName5": "3"}, {"FieldName1": "XXXX", "FieldName2": "4", "FieldName3": "XXX", "FieldName4": "XXX", "FieldName5": "4"}, ... 


} 

Что мне нужно, чтобы получить в моем выходной файл представляет собой список из 2-х полей из файлов:

"FieldName1": "1", 
"FieldName2": "1", 
"FieldName1": "2", 
"FieldName2": "2", 
"FieldName1": "3", 
"FieldName2": "3", 
"FieldName1": "4", 
"FieldName2": "4", 
. 
. 
. 

Есть ли простой способ сделать это?

Спасибо!

+2

Если у вас есть GNU 'grep', опция' -o' - это то, что вы хотите. 'grep -o '" FieldName [12] ":" [^ "] *"' 'может быть тем, что вам нужно. –

+0

Можете ли вы предоставить конкретный образец ввода с точным желаемым результатом? Просто чтобы понять, что именно вы хотите. Также подумайте о том, чтобы добавить некоторые из ваших попыток. Наконец: вы проверили команду 'jq'? – fedorqui

ответ

0

Для одной строки, вы можете использовать это gnu awk (сделать для нескольких символов в RS)

awk -v RS='"FieldName' 'NR>1 {sub(/, "/,",");print RS$0}' file 
"FieldName1": "XXXX", 
"FieldName2": "3", 
"FieldName3": "XXX", 
"FieldName4": "XXX", 

Для использования многократной линии grep или awk, как это:

awk '/FieldName/' file 
"FieldName1": "XXXX", 
"FieldName2": "1", 
"FieldName3": "XXX", 
"FieldName4": "XXX", 
"FieldName5": "1", 
Смежные вопросы