Impression de chaque Nième ligne d'un grand file dans un nouveau file

J'essaye d'imprimer chaque Nième ligne d'un file avec plus de 300.000 dossiers dans un nouveau dossier. Cela doit arriver chaque Nième logging jusqu'à ce qu'il atteigne la fin du file.

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

Cela imprime chaque cinquième ligne.

Pour utiliser une variable d'environnement:

 NUM=5 awk -v NUM=$NUM 'NR % NUM == 0' input > output 
 sed -n -e '5{p;q}' yourfile > newfile 

Où N = 5, comme exemple pour votre cas.

La command sed se décompose comme -n : -n signifie "ne pas imprimer les lignes par défaut"; puis, à la ligne 5, exécutez un set { ... } de commands; ces commands sont les suivantes: p rint la ligne, puis q uit.

De même que sed, nous avons aussi awk:

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

NR = Numéro de la ligne que vous voulez imprimer (puis quittez pour éviter d'attendre que le file se termine). Dans ton cas

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

Où Nth est le Nième numéro de ligne que vous devez imprimer.

Pour imprimer chaque N ème ligne, utilisez

  sed -n '0 ~ N p' 

Par exemple, pour copyr chaque 5ème ligne de oldfile dans un nouveau newfile , faites

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

Cela utilise la forme d'adresse de la première étape de sed , qui signifie «faire correspondre chaque pas » à partir de la ligne d' abord . En théorie, cela imprimera les lignes 0, 5, 10, 15, 20, 25, … fin du file. Bien sûr, il n'y a pas de ligne 0, donc il imprime simplement les lignes 5, 10, 20, 25, …; 0~5 est juste une façon alternative commode de dire 5~5 (qui imprime toutes les 5 lignes en commençant par la ligne 5, c'est-à-dire les lignes 5, 10, 15, 20, 25, …).

Pour un autre exemple de cette capacité sed (qui ne répond pas à la question),

 sed -n '2~5p' oldfile 

imprimerait les lignes 2, 7, 12, 17, 22, 27, …, jusqu'à la fin du file.