我有以下文件
# header1 header2
zzzz yyyy
1
kkkkk wwww
2
我想要做的是删除除标题之外的奇数行 得到以下特性:
# header1 header2
zzzz yyyy
kkkkk wwww
我尝试了这个,但它也删除了标题
awk 'NR%2==0'
做正确的方法是什么?
答案 0 :(得分:4)
awk 'NR==1 || NR%2==0'
如果记录编号为1或是偶数,请将其打印出来。
awk 'NR % 2 == 0 || NR == 1'
反转比较可能会稍微快一些。差异可能无法衡量。 (并且间距的选择也基本上是无关紧要的。)
答案 1 :(得分:4)
适用于 GNU sed
sed '3~2d' ip.txt
这将删除从第3行开始的行号,然后是+ 2,+ 4,+ 6等
示例:
$ seq 10 | sed '3~2d'
1
2
4
6
8
10
答案 2 :(得分:2)
你只需要
awk 'NR==1 || NR%2==0' file
NR%2==0
,这对于偶数行(从标题开始)是正确的,在这种情况下它将被打印。上述相同答案的另一个变体
awk 'NR==1 || !(NR%2)' file
(NR%2)
变为0并且否定该行成为打印行的真实条件答案 3 :(得分:2)
sed '1!{N;P;d}'
1!
在第一行以外的行上(默认行为与第一行相呼应)
N
将下一行附加到当前行
P
仅打印两个中的第一个
d
删除它们。
答案 4 :(得分:1)
这可能适合你(GNU sed):
sed '1b;n;d' file
可是:
sed '3~2d' file
远远不够。