Utiliser tail & head simultanément

Résolu
Bonjour,
comment je peut utiliser tail & head simultanément mon objectif est d'afficher la 2 éme ligne d'un fichier qui contien 3 ligne
tail -2 raprt.txt
head -2 raprt.txt
Configuration: Linux
Firefox 3.0.3

6 réponses

  1. Salut,

    head -2 raprt.txt | tail -1

    Décomposons :
    "head -2 raprt.txt" prélève les 2 premières lignes du fichier raprt.txt
    "|" transmet les données au programme suivant
    "tail -1" récupère les données du pipe et ne conserve que la dernière ligne

    Tu peux aussi ajouter ">> cible.txt" si tu veux sauvegarder le résultat dans un fichier ou "| less" si la sortie est trop importante pour tenir sur l'écran.

    ++
    1
    1. Modérateur
      Salut,

      [tmpfs]$ cat plop
      ligne 1
      ligne 2
      ligne 3
      
      [tmpfs]$ head -2 plop | tail -1
      ligne 2
      
      [tmpfs]$ tail -2 plop | head -1
      ligne 2
      
      [tmpfs]$

      ;-))
      1
      1. Hi,

        > redfox@mandriva[192.168.1.2]$ cat plop
        ligne 1
        ligne 2
        ligne 3
        > redfox@mandriva[192.168.1.2]$ tail -n+2 plop | head -n-1
        ligne 2
        > redfox@mandriva[192.168.1.2]$


        :-) :-)
        1
        1. Et comment faire si l'on ne connait pas le nom du fichier à l'avance, et que l'on souhaite faire une commande qui récupère les lignes 3 à 5 par exemple d'un fichier quelconque?
          (Je pensais faire un tail +3 | head -n 2 < fichier mais ça ce fonctionne pas... :/)
          0
          1. Modérateur
            Salut,

            Essaie

            :~$ cat plop
            ligne1
            ligne2
            ligne3
            ligne4
            ligne5
            ligne6
            :~$ (tail -n +3 | head -n 3) < plop
            ligne3
            ligne4
            ligne5
            0
          2. Contributeur
            Salut,

            La syntaxe donnée par "dubcek" est la seule envisageable.
            Je savais bien qu'en disant ça, un empêcheur de tourner en rond se pointerait ;-)))

            Merchi ;-)
            0
          3. Merci!! Ca marche =D
            Quel est le role des parenthèses en fait?
            0
          4. Modérateur
            Sans parenthèse, plop serait injecté dans tail.

            Ainsi on aurait pu écrire :

            (mando@aldur) (~) $ tail -n+3 < plop | head -n3
            ligne3
            ligne4
            ligne5


            ... ou plus simplement :

            (mando@aldur) (~) $ tail -n+3 plop | head -n3
            ligne3
            ligne4
            ligne5
            0
          5. ou en une seule commande tail, head ou cut
            $ cat a1 
            1 
            2 
            3 
            4 
            5 
            6 
            7 
            8 
            9 
            $ cut -d'^V^J'  -f 3-5 < a1 
            3 
            4 
            5 
            $ 
            0
        2. hello
          essayer plutot
          tail +3 < fichier | head -n 3
          1
          1. Oui mais ma commande (c'est pour un exercice) doit être de la forme
            ... < fichier
            les ... étant à remplacer par une commande utilisant soit tail, soit cut, soit head.
            0
          2. Contributeur
            Avec "tail" et "head" ce n'est pas possible.
            La syntaxe donnée par "dubcek" est la seule envisageable.

            Avec une seule commande sans le "pipe" il te faut utiliser un autre outil, comme "sed" par exemple.
            0