删除shell中的每第N行

删除shell中的每第N行

我正在尝试使用 awk 删除 N 行后的一行,但似乎无法正确执行。文件格式是这样的

YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX

真实的例子是

office3
3
1
office3
6
1
office3
6
3
office3
1
1

如何删除 YY 行或“office”行。我需要每两行删除一行,无论其内容如何。

答案1

如果您有 GNU sed,您可以使用n~m( nskip m) 地址表示法

sed '1~3d' file

从第一行开始删除每三行。

答案2

仅选择Nawktry为模的行

awk '!(NR%2)' file

或者

awk 'NR%3==0' file

这里NR表示到目前为止已处理的行数。


在您的具体情况下(删除所有带有 的行Y):

$ echo 'YYYYYY
XXXXXX
XXXXXX
YYYYYY
XXXXXX
XXXXXX' | awk '!(NR%3==1)'
XXXXXX
XXXXXX
XXXXXX
XXXXXX

相关内容