大きなファイルのすべてのN行目を新しいファイルとして印刷する

大きなファイルのすべてのN行目を新しいファイルとして印刷する

300,000を超えるレコードを含むファイルのすべてのN行を新しいファイルとして印刷しようとしています。ファイルの終わりに達するまで、N番目のレコードごとにこれを行う必要があります。

答え1

awk 'NR % 5 == 0' input > output

5行ごとに印刷します。

環境変数を使用するには、次の手順に従ってください。

NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output

答え2

それぞれ印刷窒素  3行目、使用

sed -n'0~窒素
たとえば、oldfileto の 5 行ごとにコピーするには、newfile次のようにします。

sed -n '0~5p' oldfile > newfile

sedこれは以下を使用します。最初~ステップアドレス形式は「すべての項目と一致する」を意味します。ステップ'行で始まる行最初0~5理論的には、ファイルの終わりまで0、5、10、15、20、25 、...行を印刷します。もちろん、0行はないので、5、10、20行だけを印刷します。、25、...;  表現です5~5 (5行目から始めて5行ずつ印刷します。つまり、5、10、15、20、25...)。

sedこの機能の別の例(答えがない質問)は次のとおりです。

sed -n '2~5p' oldfile

ファイルの終わりまでの行2、7、12、17、22、27、…を印刷します。

注:この方法にはGNU sedが必要です。最初~ステップアドレス形式は移植できない拡張です。 (GNU sedの一部の以前のバージョンでは、この5~5形式の代わりにこの形式が必要な場合があります0~5 。)

答え3

これはPerlバージョンです:

perl -ne 'print if $. % 5 == 0;' infile > outfile

答え4

sedと同様にawkもあります:

$ seq 1000000000 |awk 'NR==500000{print;exit}'
500000

NR =印刷したい行数(ファイルが完了するのを待たない場合は終了します)。あなたの場合

awk 'NR==Nth{print;exit}' inputfile >outputfile

ここで、Nthは印刷する必要があるN番目の行番号です。

関連情報