awk替换多行,删除第N次出现

时间:2012-10-28 20:21:48

标签: awk replace multiline

我正在尝试使用awk替换文件中的多个字符串。我有一组需要替换和删除的重复行。例如,文件有

INSTANCE "INVX1":"physical"
"A" : "reset"
"Y" : "pp_resetbar"

INSTANCE "INVX1":"physical"
"A" : "reset"
"Y" : "pp_resetbar"

INSTANCE "INVX1":"physical"
"A" : "reset"
"Y" : "pp_resetbar"

我想更改/替换前两个并删除第3个,第4个,......,第N个

INSTANCE "INVX1":"physical"
"A" : "reset"
"Y" : "pp_resetbar_b"

INSTANCE "BUFX2":"physical"
"A" : "pp_resetbar_b"
"Y" : "pp_resetbar"

说实话,我甚至不知道从哪里开始。我创建了一个脚本来替换第N次出现但似乎不适用于此。见下文。任何帮助都将得到更多的赞赏。

awk -v search=$2 -v replace=$3 -v cnt=$4 '$0 ~ search{c++;if(c==cnt){sub(search,replace);}}1' "$file" > temp && mv temp "$file"

1 个答案:

答案 0 :(得分:1)

未经测试但应该关闭:

awk -v RS= -v ORS="\n\n" '
    { c = ++count[$0] }
    c == 1 { <replace some stuff> }
    c == 2 { <replace other stuff> }
    c <= 2
' file