跳到主要内容

[toc]

shell获取奇数行和偶数行

方法一 awk

文件内容

$ cat test.txt
1
2
3
4
5
6

获取奇数行

方法一 NR为行,每一行与2取模,奇数与2取模结果为1,1为真,所以输出奇数行

$ awk 'NR%2' test.txt
1
3
5

方法二 ++i表示i先自加1,因此i的值为1

$ awk '++i%2' test.txt
1
3
5

方法三 行数与2取模,等于1的就是奇数行

$ awk '{if(NR%2==1)print $0}' test.txt
1
3
5

获取偶数行

方法一 NR为行,每一行与2取模,奇数与2取模结果为1,1为真,所以输出奇数行,取反则输出偶数行

$ awk '!(NR%2)' test.txt
2
4
6

方法二 i++表示先赋值再自加,因此i的值为0

$ awk 'i++%2' test.txt
2
4
6

方法三 行数与2取模,等于0的就是偶数行

$ awk '{if(NR%2==0)print $0}' test.txt
2
4
6

方法二 sed

获取奇数行

n表示换行,此命令为先打印P,然后再换行,会把下一行覆盖,因此为先打印1行,然后换行,覆盖第二行,再打印第3行,覆盖第四行。。。

$ sed -n '1,$p;n' test.txt
1
3
5

获取偶数行

与奇数行相反,先换行,覆盖第一行,再打印,打印第二行,然后再换行,覆盖第三行,然后再打印,打印第四行。。。

$ sed -n '1,$n;p' test.txt
2
4
6