Unix awk删除每两行

时间:2013-11-02 23:39:16

标签: unix awk

基本上我需要打印2行然后删除两行,依此类推。

awk 'BEGIN {count = 0} if(count == 4){count = 0} else if(count <= 1) {print,count++} else {count++}' f4

我收到了语法错误。

awk '{count = 0; if(count == 4)count = 0; else if(count <= 1) print count++; else count++;}' f4

它打印全部为零。

我也试过

awk 'NR%3 && NR%4' f4

哪个很接近,但不打印3和4的倍数。

由于

编辑:GOT IT!

awk 'BEGIN{count = 0};{ if(count == 3)count = 0; else if(count <= 1) {print; count=count+1;} else count=count+1;}' f4

3 个答案:

答案 0 :(得分:8)

这应该是最简短和最简单的解释之一

awk 'NR%4==1 || NR%4==2'


NR%4==1开始,forth会打印每one行 从NR%4==2开始,forth会打印每two||这是一个合乎逻辑的or

鉴于此文件

cat file
one 1
two 2
three 3
four 4
five 5
six 6
seven 7
eight 8
nine 9
ten 10
eleven 11
twelve 12
thirteen 13
fourteen 14
fifteen 15
sixteen 16
seventeen 17
eighteen 18
nineteen 19
twenty 20


awk 'NR%4==1 || NR%4==2' file

给出:

one 1
two 2
five 5
six 6
nine 9
ten 10
thirteen 13
fourteen 14
seventeen 17
eighteen 18

使用&&

的变体
awk 'NR%4 && NR%4!=3'

答案 1 :(得分:2)

使用getline功能读取以下行并丢弃那些您不想打印的行:

awk '{ print; getline; print; getline; getline }' infile

答案 2 :(得分:2)

这对我有用:

awk 'int((NR-1)/2)%2 == 0'