我有一个看起来像这样的文件:
[TEST]
Path1 = db/test/testdb
Path2 = db/real/db
[TEST2]
Path1 = db/test/testdb
Path2 = db/real/db
DataSizeMB = 1234
有什么办法可以重复每个节以查看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
答案 0 :(得分:1)
这根班轮可能会对您有所帮助,至少它可以让您开始:
awk -v RS="" -v pat="DataSizeMB = 1234" '!($0~pat){$0=$0 ORS pat}$0=$0 ORS' file
(文件后会附加一个空行。)
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分: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
$