Sedを使用して、奇数行をすべて削除するにはどうすればよいですか?
remove
keep
remove
keep
remove
...
GNU sedには適切なアドレス指定モードがあります。
sed -n '1~2!p' file
つまり、1行目から開始し、手順2で他のすべての行を印刷します。
同様に、-n
、および一致する行を削除します。
sed '1~2d'
Awkを使用して行うこともできます。
awk 'NR%2==0' file
(行番号が2の倍数になるたびに、行を印刷します)
私が考えることができる最短はここにあります:
sed -n 'g;n;p' file
これは、GNU以外のバージョンのsed
(およびGNU sed
)と連携する必要があります。
これは、GNUおよびsedのBSD(mac)バージョンで動作します。
奇数行を削除するには(偶数行を印刷):
sed -n ’n;p’ file
少し混乱するように見えるかもしれませんので、フードの下でステップバイステップで何が起こるかを以下に示します。
偶数行を削除するには(奇数行を印刷):
sed -n ‘p;n’ file
フードの下でアルゴリズム的に行われることは次のとおりです。
Perlソリューション:
Perl -ne 'print if $. % 2 == 0' file
$.
は行番号です
もう1つのawk:
awk getline file