Как соединить строки между двумя шаблонами в sed или awk - PullRequest
1 голос
/ 05 ноября 2019

У меня есть файл json, в котором я хочу объединить x количество строк в скобках.

cat testfile.json
 {
  "CacheStatistics_ReadHits": 0,
  "CacheStatistics_ControllerPrefetchRemaining": [
   0,
   0
  ],
  "CacheStatistics_ControllerReadMisses": [
   0,
   0
  ]
 }

Я пробовал следующее, которое должно выполнить замену новой строки, сначала начиная со строки, заканчивающейся на '[', и продолжая до закрывающей скобки ']'.

sed -i '/\[$/,/\]/ s/\n//g' testfile.json

/\[$/ ищет строку, оканчивающуюся открытой скобкой. /\]/ продолжайте до достижения закрывающей скобки. s/\n//g заменить символы новой строки ничем

Полученный файл должен быть:

 {
  "CacheStatistics_ReadHits": 0,
  "CacheStatistics_ControllerPrefetchRemaining": [0, 0],
  "CacheStatistics_ControllerReadMisses": [0, 0]
 }

1 Ответ

0 голосов
/ 05 ноября 2019

эта программа решит вашу проблему. Вы можете сохранить его в файле с именем: myprogram.awk

{
if($0 ~ /.*CacheStatistics_ControllerPrefetchRemaining/ ||  $0 ~ /.*CacheStatistics_ControllerReadMisses/){
        datos="";
        gsub("\\n","",$0); datos=datos$0;  
        getline; 
        gsub("\\n","",$0); gsub(" ","",$0); 
        datos=datos$0;
        getline; 
        gsub("\\n","",$0); gsub(" ","",$0); 
        datos=datos$0;
        getline;
        gsub(" ","",$0);  
        datos=datos$0;
        print datos;
}
else
    print $0;

Вы можете выполнить так:

awk -f program.awk testfile.json

testfile.json - это данные, которые вы опубликовали.

У меня есть такой вывод:

{
  "CacheStatistics_ReadHits": 0,
  "CacheStatistics_ControllerPrefetchRemaining": [0,0],
  "CacheStatistics_ControllerReadMisses": [0,0]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...