Je me demande s'il existe un moyen simple de fonctionner sur certaines lignes avec des numéros de ligne préassignés.
Disons que je veux sortir les 1ère, 7ème, 14ème et 16ème lignes d'un fichier, je peux simplement faire
sed -n '1p;7p;14p;16p' input_file
mais cela devient plus compliqué lorsque l'opération ne consiste pas seulement à imprimer, et je ne veux pas écrire la même commande longue 4 fois (et oui, je sais que je peux construire cette longue commande sed en substituant la même variable bash 4 fois, mais ce n'est pas assez idéal ...), c'est à dire
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Existe-t-il un moyen d'effectuer l'opération sur ces lignes spécifiques de mon fichier? J'attends quelque chose comme
sed -n '1,7,14,16p'
qui ne fonctionnera certainement pas sous la forme actuelle.
Toute aide serait appréciée. "Non ce n'est pas possible." avec explications est aussi une réponse que j'accepterai.
awk
Réponses:
Vous pouvez utiliser des branches:
(notez que vous pouvez également ajouter des
20,25b1
plages/re/b1
de lignes ou inclure des lignes correspondant àre
).Ou vous pouvez utiliser
awk
:Ou en utilisant un hachage:
(ou
BEGIN{lines[1]lines[7]lines[14]lines[16]}
s'il n'y en a pas trop)la source
Inversez simplement votre sélection et supprimez-la:
la source
Première variante:
Vous pouvez utiliser cette astuce:
Essai
Production
Deuxième variante:
Au début, l'auxiliaire
sed
est utilisé pour filtrer uniquement les lignes nécessaires du fichier, puis ces lignes sont redirigées vers le principalsed
avec la commande longue.la source