Chat Unix à partir de ligne

40

Quel est le meilleur moyen de sortir d'un fichier à partir d'une ligne spécifique (grand nombre comme 70000). Quelque chose comme:

cat --line=70000 <file>
vonhogen
la source

Réponses:

60

Jetez un coup d'œil à tail, plus précisément, c'est --lines = + N switch:

tail --lines=+100 <file>
Svend
la source
Sensationnel. Je ne le savais même pas après l'avoir utilisé sur Linux pendant 8 ans! J'ai toujours utilisé un bash fn! Merci ! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; linéno = expr $lineno - $2; tail -n $ lineno $ 1; }
secureBadshah Le
2
A noter que cela ne fonctionne pas sur Mountain Lion (Darwin Kernel Version 13.1.0). La variante de Mountain lion esttail -n
Kaushik Ghose de
22

Le moyen le plus évident est tail. La syntaxe peut être légèrement différente selon le système d'exploitation que vous utilisez:

tail -n +70000

Si vous ne pouvez pas vous rendre tailau travail, vous pouvez utiliser sed, mais cela risque de ralentir:

sed -pe '1,69999d'
Chris Johnsen
la source
tailfonctionnait parfaitement dans MinGW (sur un fichier texte de 600 Mo). Le temps d'exécution n'était que de quelques secondes (mais le fichier d'entrée aurait déjà été dans le cache de fichiers).
Peter Mortensen
2

Si, au lieu d’un numéro de ligne, vous devez commencer à répertorier la ligne contenant une donnée $phrase, essayez ce qui suit.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

Le -1000 listera en permanence le texte sur 1000 lignes maximum; vous pouvez changer cela au besoin. La sedcommande coupera les 4 premières lignes de la sortie, qui ont été automatiquement insérées par more, contenant une ligne vide, le message "... sautant" et les deux lignes précédant votre ligne de départ. Je suppose que cela peut varier en fonction de votre système.

AlohaUnixFan
la source
2

Vous pouvez utiliser le paramètre NR avec la commande awk :

cat <file> | awk '{if (NR>=7000) print}'
Gefolge
la source
2
Vous pouvez utiliser cette commande avec d'autres limites. À titre d'exemple: cat messages | awk '{if (NR>=7000 && NR <7003) print}'affiche uniquement les lignes 7000, 7001 et 7002.
Gefolge
-1

queue +250

plus sur la commande unix cat


la source
2
lien fascinant, mais il ne donne pas vraiment d’information qui s’applique à cette question, et votre tailsuggestion est la même que celle acceptée et d’autres réponses d’il ya des semaines. pourquoi prendre la peine de poster?
Quack Quichotte
Le lien est cassé -...can't find the server at www.scripterworld.com.
Peter Mortensen