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
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
- réponse dupliquée de unix.stackexchange.com/a/89641/72456
sed
, puisquesed
est tellement plus petit (et se charge plus rapidement) queawk
.