1

基本上我需要打印两行然后删除两行等等。

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 的倍数。

谢谢

编辑:明白了!

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

3 回答 3

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'
于 2013-11-03T08:12:12.677 回答
2

使用getline函数读取以下行并丢弃您不想打印的行:

awk '{ print; getline; print; getline; getline }' infile
于 2013-11-02T23:42:48.297 回答
2

这对我有用:

awk 'int((NR-1)/2)%2 == 0'
于 2013-11-03T02:43:37.533 回答