R******d 发帖数: 1436 | 1 文件中第二行开始,到某个匹配行都不打印,其他行打印,怎么通过awk实现,谢谢。
下面这个实现的刚好是个反的:
awk 'NR==2,/mark/' file |
y****i 发帖数: 4109 | 2 (head -1 file) && (sed '1, /mark/d' file) |
R******d 发帖数: 1436 | |
y****i 发帖数: 4109 | 4 (awk 'NR==1' file && awk '/mark/{i=!i;next}i' file ) >>newfile |
R******d 发帖数: 1436 | 5 高手好用, 可以解释一下这段的逻辑么 awk '/mark/{i=!i;next}i'
【在 y****i 的大作中提到】 : (awk 'NR==1' file && awk '/mark/{i=!i;next}i' file ) >>newfile
|
y****i 发帖数: 4109 | 6
哈不是高手。
最后那个i的意思是: 如果该值非零,就print $0, 否则不打印,i初始缺省值是0。
这个程序就是说,逐行扫描,一开始没有match,不执行{}中内容, i 都是0 故不打印。
碰到match以后执行{}中的语句,把i变成非零,next就是跳到下一行。
其实这样也可以 '/mark/{i=1;next} i' 非零值可以是1,2, 3 ,-1...
【在 R******d 的大作中提到】 : 高手好用, 可以解释一下这段的逻辑么 awk '/mark/{i=!i;next}i'
|
p****n 发帖数: 51 | 7 NR 是行号,判断一下就好了。比如第二行到第60行不打印,其他行打印。
awk '{ if (NR < 2 || NR > 60) print $0 }' file
【在 R******d 的大作中提到】 : 文件中第二行开始,到某个匹配行都不打印,其他行打印,怎么通过awk实现,谢谢。 : 下面这个实现的刚好是个反的: : : awk 'NR==2,/mark/' file
|
c****n 发帖数: 89 | 8 awk 'NR==2,/mark/{next}1' file
【在 R******d 的大作中提到】 : 文件中第二行开始,到某个匹配行都不打印,其他行打印,怎么通过awk实现,谢谢。 : 下面这个实现的刚好是个反的: : : awk 'NR==2,/mark/' file
|
M**********r 发帖数: 2 | |
z*****g 发帖数: 810 | 10 sed is better to use in this case |