[linux]linux過濾日誌奇偶數行

大搜車-自娛發表於2012-05-17
sed -n -e 'n' -e 'p' -i tmp.txt 偶數 實踐過

去掉檔案裡的重複行:
sort file |uniq

下面就把這些方法總結下來。
along@along-laptop:~/code/shell$ cat file
1
2
3
4
5
6
7

awk實現:

一:
1,awk 'NR%2==1' file
2,awk 'NR%2==0' file

二:(這是直接將偶數行和奇數行分別列印到了file2和file1中,這種方法有缺陷就是在file2中始終會列印
最後一行,這個應該改進。不過這也是一種思想,我就把這種方法放在這裡了。)
awk '{print $0 > "file1"; getline; print $0 > "file2"; }' file

三:
1.awk 'NR%2' file
2.awk '!(NR%2)' file

四:
1.awk 'i=i?0:1' file
2.awk '!(i=i?0:1)' file

五:
1.awk 'i=!i' file
2.awk '!(i=!i)' file

解釋:
awk 'var=xx'應該說等價於awk 'xx{print}{var=xx}'

awk 'i=!i' == > awk '!i{print}{i=!i}
line 1: !0{print}{i=!0}==> {print;i=1}
line 2: !1{print}{i=!1}==> {i=0}
line 3: !0{print}{i=!0}==> {print;i=1}
sed實現

一:
1.sed -n 'p;n' file
2.sed -n 'n;p' file

二:(這種方法更通用一點)
1.sed -n '1~2p' file
2.sed -n '2~2p' file

關於sed的模式空間的問題以及G,g,H,h的問題可以在我的另外一篇文章中找到我的總結。
http://blog.chinaunix.net/u2/77727/showart.php?id=1997477

相關文章