我有一个看起来像这样的文件:
[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
这一个衬垫可以帮助你,至少它可以让你开始:
awk -v RS="" -v pat="DataSizeMB = 1234" '!($0~pat){$0=$0 ORS pat}$0=$0 ORS' file
(会有附加到文件的空行。)
$ 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
可否请您尝试以下操作。
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
使用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
$