FWIW这是我怎么会真的做的工作(只是改变b
和a
值删除不同的号码行前/后match
发现):
$ cat file
1
2
3
4
5 match
6
7
8
9
$ awk -v b=2 -v a=2 'NR==FNR{if (/match/) for (i=(NR-b);i<=(NR+a);i++) skip[i]; next } !(FNR in skip)' file file
1
2
8
9
$ awk -v b=3 -v a=1 'NR==FNR{if (/match/) for (i=(NR-b);i<=(NR+a);i++) skip[i]; next } !(FNR in skip)' file file
1
7
8
9
注意上面的假设,当2“匹配” S出现在去除窗口中要立足于原有发生缺失,而不是世界卫生大会吨会发生被找到的第一个匹配使所述第二匹配要被删除后:
$ cat file2
1
2
3
4 match
5
6 match
7
8
9
$ awk -v b=2 -v a=2 'NR==FNR{if (/match/) for (i=(NR-b);i<=(NR+a);i++) skip[i]; next } !(FNR in skip)' file2 file2
1
9
,而不是输出是:在删除该2行第一match
之后将删除
1
7
8
9
第二个match
,所以THAT后面的2行不会被删除,因为它们不会在match
之后的2行内。
别的东西来考虑:
$ diff --changed-group-format='%<' --unchanged-group-format='' file <(grep -A2 -B2 match file)
1
2
8
9
$ diff --changed-group-format='%<' --unchanged-group-format='' file2 <(grep -A2 -B2 match file2)
1
9
使用bash和GNU的diff 3.2,IDK的如果/哪些其他壳/ diff文件将支持这些构造/选项。
那''/ somedir/*/someCommonName.txt'太危险了吗? – leeand00
第一个对我不起作用:'seq 10 |例如,sed -e'/ 5 /, - 2d''返回“sed:-e表达式#1,字符5:意外的','”错误。事实上,我怀疑第一个命令是否对你有用。请参阅[使用sed(或awk)]删除上述模式行的范围](http://unix.stackexchange.com/q/29906/40596)。 – fedorqui
这不是危险的,只是难以阅读并进入重点 – fedorqui