
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~窒素血たとえば、
oldfile
to の 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番目の行番号です。