Как добавить строку в строфу, если она еще не существует - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть файл, который выглядит следующим образом:

[TEST]
Path1 = db/test/testdb
Path2 = db/real/db

[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234

Есть ли способ, где я могу grep каждой строфы, чтобы увидеть, если DataSizeMB = 1234 есть?А если нет, добавьте его в раздел?

Что я пробовал:

cat test.txt | awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/DataSizeMB/'

, который захватывает все разделы с помощью DataSizeMB.Мне нужно собрать все строфы без DataSizeMB и добавить строку.

Пример вывода:

[TEST]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234

[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234

Ответы [ 4 ]

0 голосов
/ 04 февраля 2019

Используйте Perl, режим абзаца -00 в однострочнике, вот для чего он предназначен.

perl -00 -lpe ' BEGIN {$t="DataSizeMB = 1234" } $_.="\n$t" if ! /$t/ ' 

с входами

$ perl -00 -lpe ' BEGIN {$t="DataSizeMB = 1234" } $_.="\n$t" if ! /$t/ ' alanc.txt
[TEST]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234

[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234


$
0 голосов
/ 01 февраля 2019

Не могли бы вы попробовать следующее.

awk -v var="DataSizeMB = 1234"  '
/^\[/ && value{
  if(found){
    print value
  }
  else{
    print value ORS var
  }
  found=value=""
}
$0 ~ var{
  found=1
}
NF{
  value=value?value ORS $0:$0
}
END{
  if(found){
    print value
  }
  else{
    print value ORS var
  }
}'   Input_file
0 голосов
/ 02 февраля 2019
$ awk -v RS= -v ORS='\n\n' -v str='DataSizeMB = 1234' '{print $0 (index($0,str) ? "" : "\n" str)}' file
[TEST]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234

[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234
0 голосов
/ 01 февраля 2019

Этот один вкладыш может помочь вам, по крайней мере, он может позволить вам начать:

awk -v RS="" -v pat="DataSizeMB = 1234"  '!($0~pat){$0=$0 ORS pat}$0=$0 ORS' file

(к файлу будет добавлена ​​пустая строка.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...