Comment exécuter awk pour un certain nombre de lignes.?

Je veux extraire quelques lignes avec awk. Est-il possible deffectuer la tâche suivante:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

Comment puis-je afficher les détails des lignes 122 à 129?

Commentaires

  • Si vous deviez faire cela en boucle, je ' d suggère le sed, puisque sed est tellement plus petit (et se charge plus rapidement) que awk.

Réponse

Vous navez pas compris comment fonctionne awk. Le « programme » spécifié est toujours exécuté une fois pour chaque ligne (ou « record » en langage awk) dentrée, il « nest pas nécessaire de FOR ou toute construction similaire. Utilisez simplement:

méthode verbeuse

ls -l | awk "NR>=122 && NR<=129 { print }" 

méthode plus compacte

ls -l | awk "NR==122,NR==129" 

Celui-ci donne une plage pour NR, qui est le « numéro denregistrement », généralement ce est la ligne en cours de traitement par awk.

Commentaires

  • En fait, le code pour une telle tâche est généralement ls -l | awk 'NR==122,NR==129'.
  • quelle est la commande pour obtenir les 100 dernières lignes du fichier en utilisant awk
  • @ShihabudheenKM Vous pouvez jeter un œil à ceci: stackoverflow.com/questions/12546919/…

Réponse

Une autre méthode alternative serait dutiliser sed :

Mais si, comme votre question le suggère, il est important dutiliser awk pour cela, suivez le commentaire de manatwork sur la réponse de Zrajm. Comme lindique la documentation de awk:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Donc, si vous le souhaitez, vous pouvez également créer des conditions plus avancées. Par exemple:

ls -l | awk "NR==122,/foobar/" 

Cela commencerait la sortie à la ligne 122, et continuerait jusquà ce quune ligne contienne le mot «foobar».

Si vous nous indiquez le cas d’utilisation réel , nous pourrons peut-être vous aider avec des réponses qui fournissent une meilleure solution. Je crains que cela ressemble à un problème XY .

Réponse

Une autre façon de faire cela (bien que je préfère la méthode awk) en utilisant coreutils:

ls -l | tail -n +122 | head -n 8 

Answer

 awk "NR == 122,NR == 129{print $0}" file 

Ici, nous pouvons extraire les lignes de 122 à 129 du fichier.

$0 est utilisé pour imprimer lensemble des données du fichier entre 122 et 129 lignes.

Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *