Unix awk删除每两行

Nex*_*xus 1 unix awk

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

awk 'BEGIN {count = 0} if(count == 4){count = 0} else if(count <= 1) {print,count++} else {count++}' f4
Run Code Online (Sandbox Code Playgroud)

我收到语法错误.

要么

awk '{count = 0; if(count == 4)count = 0; else if(count <= 1) print count++; else count++;}' f4
Run Code Online (Sandbox Code Playgroud)

它打印全部为零.

我也试过了

awk 'NR%3 && NR%4' f4
Run Code Online (Sandbox Code Playgroud)

这是接近但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
Run Code Online (Sandbox Code Playgroud)

Jot*_*tne 8

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

awk 'NR%4==1 || NR%4==2'
Run Code Online (Sandbox Code Playgroud)


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
Run Code Online (Sandbox Code Playgroud)


awk 'NR%4==1 || NR%4==2' file
Run Code Online (Sandbox Code Playgroud)

得到:

one 1
two 2
five 5
six 6
nine 9
ten 10
thirteen 13
fourteen 14
seventeen 17
eighteen 18
Run Code Online (Sandbox Code Playgroud)

使用的变体 &&

awk 'NR%4 && NR%4!=3'
Run Code Online (Sandbox Code Playgroud)

  • 或者简称`NR%4~/[12] /` (2认同)