Avec la commande Linux “ cat ”, comment afficher uniquement certaines lignes par numéro
On février 15, 2021 by admin Si jutilise cat -n text.txt
pour numéroter automatiquement les lignes, comment puis-je utiliser la commande pour nafficher que certaines lignes numérotées.
Commentaires
Réponse
Utilisez sed
Utilisation
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Pour imprimer une ligne (5)
$ sed -n 5p file Line 5
Pour imprimer plusieurs lignes (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Pour imprimer une plage spécifique (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Pour imprimer la plage avec une autre ligne spécifique (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Réponse
Une façon de le faire est dutiliser sed
:
cat -n text.txt | sed "11d"
où 11 est le numéro de la ligne à supprimer.
Ou à supprimer tout sauf 11:
cat -n text.txt | sed "11!d"
Les plages sont également possibles:
cat -n text.txt | sed "9,12!d"
Et cat -n
nest même pas nécessaire:
sed "9,12!d" text.txt
Réponse
Vous peut utiliser awk directement.
awk "NR==1" file.txt
en remplaçant « 1 » par le numéro de ligne souhaité.
Commentaires
- Cest à un million de kilomètres la meilleure réponse ici et mérite beaucoup plus damour quelle nen a.
Réponse
En fonction des objectifs que jaime head ou grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
renvoie les lignes 41 à 50.
ou
cat /var/log/syslog -n | grep " 50" -b10 -a10
affichera les lignes 40 à 60. Le problème avec la méthode grep est que vous doivent utiliser un compte pour le remplissage des numéros de ligne (notez lespace)
Les deux sont très pratiques pour analyser les fichiers journaux.
Commentaires
- Aucun des deux exemples na besoin de
cat
bien - eh bien oui .. .mais … mais … ….. Il existe de meilleures façons. La question posée sur lutilisation de chat cependant, alors je lai utilisé.
-
cat
peut ' faire ce que lOP veut
Réponse
Comme dautres vous lont montré, il nest pas nécessaire dutiliser cat -n
. Dautres programmes le feront pour vous. Si, cependant, vous avez vraiment besoin danalyser la sortie de cat -n
et dafficher uniquement des lignes spécifiques (par exemple, 4-8, 12 et 42), vous pouvez faire:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42" 4 Line 4 5 Line 5 6 Line 6 7 Line 7 8 Line 8 12 Line 12 42 Line 42
Dans awk
, $1
est le premier champ, donc cette commande simprime toutes les lignes dont les premiers champs sont i) entre 4 et 8 (inclus) ou ii) 12 ou iii) 42.
Si vous souhaitez également supprimer le champ ajouté par cat -n
pour obtenir les lignes originales du fichier, vous pouvez faire:
$ cat -n file | awk "$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}" Line 4 Line 5 Line 6 Line 7 Line 8 Line 12 Line 42
Commentaires
- Pourriez-vous ' utiliser
NR
au lieu de$1
? - @SolomonUcko bien sûr, mais comme je montrais comment faire cela en utilisant
cat -n
spécifiquement, jai pensé que jutiliserais la sortie fournie parcat -n
.
Réponse
Vous pouvez utiliser sed pour afficher un seul nombre et l oop ceci avec une boucle for:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
peut également le faire, tout commeawk