次のawkスクリプトはSAMPLE
ブロックにエントリを追加しますNOTES
。同じ名前のブロックが複数あります。 SAMPLEエントリを最初のブロック「NOTES」にのみ追加するには、このコマンドで何を変更する必要がありますか?
class.txt には次の内容が含まれています。
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
このコマンドを実行した後
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z)
}
sub (/$/,"\n"z ,$0)
};1' class.txt
出力:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
whitelist.4=SAMPLE <-------
ブロックマッチング[serverClass:NOTES]にのみ追加するには、上記のawkコマンドで何を変更する必要がありますか?
期待される:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <------- should be
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
答え1
最も簡単な方法は、変数を使用してその値を1
最初にNOTES
見つかった時間に設定することです。次に、変数でない場合にのみ新しい項目を追加するようにスクリプトに指示します1
。たとえば、
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/ && flag!=1{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z);
flag=1;
}
sub (/$/,"\n"z ,$0)
};1' infile