如何将行添加到一个节,如果不存在的话

问题描述 投票:2回答:4

我有一个看起来像这样的文件:

[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的节。我需要到grep所有节没有DataSizeMB并添加行。

一个例子的输出:

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

[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234
bash shell awk scripting grep
4个回答
1
投票

这一个衬垫可以帮助你,至少它可以让你开始:

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

(会有附加到文件的空行。)


1
投票
$ 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
投票

可否请您尝试以下操作。

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
投票

使用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


$
© www.soinside.com 2019 - 2024. All rights reserved.