Si vous deviez le faire en boucle, je suggérerais la sedméthode, car elle sedest beaucoup plus petite (et se charge plus rapidement) que awk.
zrajm
Réponses:
36
Vous n'avez pas compris comment ça awkmarche. Le "programme" spécifié est toujours exécuté une fois pour chaque ligne (ou "enregistrement" en langage awk) d'entrée, il n'y a pas besoin de FORou de 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 d'enregistrement", généralement c'est la ligne en cours de awktraitement.
En fait, le awkcode typique pour une telle tâche est généralement ls -l | awk 'NR==122,NR==129'.
manatwork
quelle est la commande pour obtenir les 100 dernières lignes du fichier en utilisant awk
Shihabudheen KM
8
Une autre méthode alternative serait d'utiliser sed:
ls -l | sed -ne '122,129p'
Mais si, comme votre question le suggère, il est important d'utiliser awk pour cela, allez avec le commentaire de manatwork sur la réponse de Zrajm. Comme l'indique la documentation d'awk:
A pattern may consist of two patterns separated by a comma; in thiscase, 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 qu'une ligne contienne le mot "foobar".
Si vous nous dites le cas d'utilisation réel , nous pourrons peut-être vous aider avec des réponses qui fourniront une meilleure solution. Je crains que cela ne ressemble à un problème XY .
sed
méthode, car ellesed
est beaucoup plus petite (et se charge plus rapidement) queawk
.Réponses:
Vous n'avez pas compris comment ça
awk
marche. Le "programme" spécifié est toujours exécuté une fois pour chaque ligne (ou "enregistrement" en langage awk) d'entrée, il n'y a pas besoin deFOR
ou de construction similaire. Utilisez simplement:méthode verbeuse
méthode plus compacte
Celui-ci donne une plage pour
NR
, qui est le "numéro d'enregistrement", généralement c'est la ligne en cours deawk
traitement.la source
awk
code typique pour une telle tâche est généralementls -l | awk 'NR==122,NR==129'
.Une autre méthode alternative serait d'utiliser
sed
:Mais si, comme votre question le suggère, il est important d'utiliser awk pour cela, allez avec le commentaire de manatwork sur la réponse de Zrajm. Comme l'indique la documentation d'awk:
Donc, si vous le souhaitez, vous pouvez également créer des conditions plus avancées. Par exemple:
Cela commencerait la sortie à la ligne 122 et continuerait jusqu'à ce qu'une ligne contienne le mot "foobar".
Si vous nous dites le cas d'utilisation réel , nous pourrons peut-être vous aider avec des réponses qui fourniront une meilleure solution. Je crains que cela ne ressemble à un problème XY .
la source
Une autre façon de faire cela (bien que je préfère la
awk
méthode) en utilisant coreutils:la source