我有以下文件
# header1 header2 zzzz yyyy 1 kkkkk wwww 2
我想要做的是删除除了标题产生的奇数行:
# header1 header2 zzzz yyyy kkkkk wwww
我尝试过,但也删除标题
awk 'NR%2==0'
什么是正确的方法来做到这一点?
适用于GNU sed
sed '3~2d' ip.txt
这会删除从第3行开始,然后是+ 2,+ 4,+ 6等的行号
例:
$ seq 10 | sed '3~2d' 1 2 4 6 8 10
awk 'NR==1 || NR%2==0'
如果记录号码是1或者是偶数,则打印它。
awk 'NR % 2 == 0 || NR == 1'
反转比较可能会稍微快一点。 差别可能是不可测量的。 (间距的选择实质上也是非常重要的。)
您只需
awk 'NR==1 || NR%2==0' file
NR%2==0
,这仅对于偶数行(从标题开始)才是真实的,在这种情况下它将被打印。 上述相同的另一个变体的答案
awk 'NR==1 || !(NR%2)' file
(NR%2)
变为0,否定就成为打印行的真实条件 sed '1!{N;P;d}'
1!
在第一行以外的行(默认行为回显第一行)
N
将下一行追加到当前行
P
只打印两个中的第一个
d
删除它们两个。
这可能适用于你(GNU sed):
sed '1b;n;d' file
但:
sed '3~2d' file
很整齐。