ダウンサンプリングを行うには、テキストファイルの奇数行を削除する必要があります。私はこのコマンドを見つけました、
awk 'NR%2==0' file
ただし、端末の奇数行のみを印刷します。それらを本当に削除する方法は?
偶数でも奇数でもかまいません。ファイルから削除するか、別のファイルに印刷してください。これは、ターミナルでのみ印刷します。
%
はモジュラス演算子であり、NR
は現在の行番号です。したがって、NR%2==0
は偶数行に対してのみtrueであり、それらのデフォルトルールを呼び出します({ print $0 }
) 。したがって、偶数行のみを保存するには、awk
からの出力を新しいファイルにリダイレクトします。
awk 'NR%2==0' infile > outfile
sed
でも同じことができます。 devnulls answerは、GNU sed
を使用してそれを行う方法を示します。以下は、~
演算子を持たないsed
のバージョンの代替案です。
奇数行を保つ
sed 'n; d' infile > outfile
偶数行を維持する
sed '1d; n; d' infile > outfile
GNU sed:
sed -i '0~2d' filename
ファイルから偶数行を削除します。
奇数行を削除するには:
sed -i '1~2d' filename
-i
オプションを使用すると、変更がファイルにインプレースで保存されます。
マニュアルから引用:
`FIRST~STEP'
This GNU extension matches every STEPth line starting with line
FIRST. In particular, lines will be selected when there exists a
non-negative N such that the current line-number equals FIRST + (N
* STEP). Thus, to select the odd-numbered lines, one would use
`1~2'; to pick every third line starting with the second, `2~3'
would be used; to pick every fifth line starting with the tenth,
use `10~5'; and `50~0' is just an obscure way of saying `50'.
ネガティブ(ラインを削除する)に焦点を合わせないで、ポジティブ(ラインを選択する)に焦点を合わせると、ソリューションはそれに続きます。したがって、I need to remove odd lines
の代わりにI need to select even lines
を考える必要があります。その場合の解決策は次のとおりです。
awk '!(NR%2)' file
結果を新しいファイルに保存する場合:
awk '!(NR%2)' file > newfile
または元に戻す:
awk '!(NR%2)' file > newfile && mv newfile file
これはあなたのために働くかもしれません(GNU sed):
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
次に、奇数行と偶数行をそれぞれ含む2つの新しいファイルを作成するawk
の例を示します。
awk '{ if (NR%2) print > "odd.txt"; else print > "even.txt" }' input.txt
偶数を新しいファイルに印刷するためのPerlソリューション:
Perl -lne 'print if $. % 2 == 0' infile > outfile
オッズを出力するには、== 1
を== 0
に変更します
$.
は行番号です
元のファイルに偶数のみを保持します。
Perl -i -lne 'print if $. % 2 == 0' infile
上記と同じですが、infile.bakというバックアップファイルを作成します。
Perl -i.bak -lne 'print if $. % 2 == 0' infile