IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Impression rapide avec plusieurs lignes en entête avec : pr -h


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut Impression rapide avec plusieurs lignes en entête avec : pr -h
    Bonjour,

    Pour faire des éditions rapides, sans passer par printf, la commande pr peut être utile.
    Si la commande pr du shell provient de celle d'IBM AIX,
    on peut lire dans la documentation IBM AIX
    la syntaxe de pr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pr [  +Page ] [  -Column [  -a ] |  -m ] [  -d ] [  -F ] [  -r ] [  -t ] [  -e [ Character ] [ Gap ] ] [  -h Header ] [  -i [ Character ] [ Gap ] ] [  -l Lines ] \
    [  -n [ Character ] [ Width ] ] [  -o Offset ]  [  -s [ Character ] ] [  -w Width ] [ -x [ Character ] [ Width ] ] [  -f ] [  -p ] [ File ... | - ]
    La question est :
    Peut-on se servir de l'option -h (header), pour imprimer plusieures lignes en haut de page ?
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Date-edition            Titre-du-document            Page 1
    NomCol1     NomCol2      NomCol3      NomCol4      NomCol5
    En effet, d'après la documentation, il semblerait que l'on puisse écrire jusqu'à 5 lignes en entête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -t	Does not display the five-line identifying header and the five-line footer. Stops after the last line of each file without spacing to the end of the page.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    Oui et non. Oui, tu as 5 lignes en entête et 5 en bas de page. Mais non, tu ne vas pas tout faire avec pr (sauf si tu as une version qui accepte l'option -H, ce qui n'est pas celle par défaut). Il faut ajouter un étage. "sed" semble bien indiqué car tu peux exploiter la périodicité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    $ pr -3 dico.txt | sed '1~66s@.*@Ceci est la ligne 1@;5~66s@.*@Ceci est la ligne 5@;'                                                                                                                                                                                     
    Ceci est la ligne 1                                                                                                                                                                                                                                                                                                            
     
    2020-01-23 20:58      dico.txt      Page 1                                                                                                                                                                                                                                                       
     
    Ceci est la ligne 5                                                                                                                                                                                                                                                                                                            
    A                       ABANDONNAMES            ABASOURDISSAIS                                                                                                                                                                                                                                                                 
    ABAISSA                 ABANDONNANT             ABASOURDISSAIT                                                                                                                                                                                                                                                                 
    ABAISSABLE              ABANDONNAS              ABASOURDISSANT                                                                                                                                                                                                                                                                 
    ABAISSABLES             ABANDONNASSE            ABASOURDISSANTE                                                                                                                                                                                                                                                                
    ABAISSAI                ABANDONNASSENT          ABASOURDISSANTES                                                                                                                                                                                                                                                               
    ABAISSAIENT             ABANDONNASSES           ABASOURDISSANTS                                                                                                                                                                                                                                                                
    ABAISSAIS               ABANDONNASSIEZ          ABASOURDISSE                                                                                                                                                                                                                                                                   
    ABAISSAIT               ABANDONNASSIONS         ABASOURDISSEMENT                                                                                                                                                                                                                                                               
    ABAISSAMES              ABANDONNAT              ABASOURDISSEMENTS                                                                                                                                                                                                                                                              
    ABAISSANT               ABANDONNATAIRE          ABASOURDISSENT                                                                                                                                                                                                                                                                 
    ABAISSANTE              ABANDONNATAIRES         ABASOURDISSES                                                                                                                                                                                                                                                                  
    ABAISSANTES             ABANDONNATES            ABASOURDISSEZ                                                                                                                                                                                                                                                                  
    ABAISSANTS              ABANDONNE               ABASOURDISSIEZ                                                                                                                                                                                                                                                                 
    ABAISSAS                ABANDONNEE              ABASOURDISSIONS                                                                                                                                                                                                                                                                
    ABAISSASSE              ABANDONNEES             ABASOURDISSONS                                                                                                                                                                                                                                                                 
    (...)
    ZOOLOGISTES             ZOZOS                   ZYGOMATIQUES                                                                                                                                                                                                                                                                   
    ZOOM                    ZOZOTA                  ZYGOMORPHE                                                                                                                                                                                                                                                                     
    ZOOMORPHE               ZOZOTAI                 ZYGOMORPHES                                                                                                                                                                                                                                                                    
    ZOOMORPHES              ZOZOTAIENT              ZYGOPETALE
    ZOOMORPHISME            ZOZOTAIS                ZYGOPETALES
    ZOOMORPHISMES           ZOZOTAIT                ZYGOTE
    ZOOMS                   ZOZOTAMES               ZYGOTES
    ZOONOSE                 ZOZOTANT                ZYMASE
    ZOONOSES                ZOZOTAS                 ZYMASES
     
     
     
     
     
    Ceci est la ligne 1
     
    2020-01-23 20:58    dico.txt     Page 1927
     
    Ceci est la ligne 5
    ZYMOTECHNIE             ZYMOTIQUES              ZYTHUM
    ZYMOTECHNIES            ZYTHON                  ZYTHUMS
    ZYMOTIQUE               ZYTHONS
    Ceci est un exemple d'un dictionnaire regroupé en 3 colonnes, dont j'ai coupé le milieu. On voit bien les entêtes remplacées, les bas-de-page vides.

    À toi de jouer

  3. #3
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Merci encore Flodelarab,

    Cela marche très bien, après modification pour adaptation à mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat ASH_Resume.csv | sed -n '/^2;/p' | cut -f5-6 -d";" | sort -t";" -k1,1 -k2,2 | 
    awk -N -F";" '{arr1[$1]+=1} {arr2[$1]+=$2} END {for (i in arr1) {print i";"arr1[i]";"arr2[i]";"arr2[i]/arr1[i]}}' | sort -t";" -k1,1 | 
    pr -d  -h ". . . . . . . Revue de presse pour les Assistantes Sociales . . . . . . ." -l  100 -e";"25 -F  | 
    sed '1~66s@.*@   @;5~66s@.*@N°FileSender    NbArticles                 NbDownload                      Moyenne@;'
    mais j'ai du mal à déchiffrer le sed !

    Dans mon exemple, et pour l'utilisation régulière de la commande pr,

    j'aimerais après le titre du document (ici :". . . . . . . Revue de presse pour les Assistantes Sociales . . . . . . ."),

    juste pouvoir indiquer le nom des colonne listées.

    Dans la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1~66s@.*@Ceci est la ligne 1@;5~66s@.*@Ceci est la ligne 5@;'
    Que veut dire les :
    ~
    s
    @
    .
    * . . . . . . . . ?

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Liamm Voir le message
    mais j'ai du mal à déchiffrer le sed !
    C'est vrai que là c'est chaud...
    Pour connaitre "sed" il faut connaitre "vi", l'éditeur de base d'Unix. Cet éditeur "vi" s'appuie sur un éditeur plus bas niveau nommé "ed". D'ailleurs toutes les commandes ":" que l'on tape sous "vi" comme par exemple :1,$s/xxx/yyy/g sont des commandes "ed" (on pourrait très bien ouvrir le fichier avec "ed" et la taper directement sans les ":", ex 1,$s/xxx/yyy/g).
    Et "sed" (Stream EDitor) c'est un outil qui permet d'envoyer un flux directement sur "ed".

    Ces commandes "ed" s'appuient sur les regex (expressions régulières). Or le principal souci des regex c'est qu'on sait les taper (car on suit notre logique quand on les tape) mais c'est assez difficile de les relire (car ça impose de déchiffrer une logique qui n'est pas la notre).
    Et les regex utilisent des caractères spécifiques pour exprimer certaines règles. "*" signifie par exemple "répéter de 0 à l'infini" donc "a*x" matchera "ax" mais aussi "aaaaax" et aussi "aaaaaaaaaax". Bref toute une syntaxe assez riche pour chercher des chaines selon certains critères.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    1 -> ligne 1
    5 -> ligne 5
    1~66 -> ligne 1 puis toutes les 66 lignes
    1~2 -> 1 ligne sur 2
    2~2 -> 1 ligne sur 2 à partir de la deuxième.
    Tu comprends donc que la page fait 66 lignes, dont 5 d'entête et 5 de pied-de-page.
    s -> substitution
    s/toto/tata/ -> remplace toto par tata. (ce sont des regex)
    s@toto@tata@ -> remplace toto par tata. (ce sont des regex)
    s|toto|tata| -> remplace toto par tata. (ce sont des regex)
    s,toto,tata, -> remplace toto par tata. (ce sont des regex = regular expressions = expressions rationnelles)
    . -> n'importe quel caractère
    * -> le caractère précédent en quantité quelconque (même zéro !!!)
    \+ -> le caractère précédent en quantité 1 ou plus.
    \? -> le caractère précédent en quantité 0 ou 1.
    s@.*@toto@ -> remplace toute la ligne par "toto". (en fait, remplace n'importe quel caractère en quantité maximale, par "toto")
    1~66s@.*@ @; -> À partir de la ligne 1 et toutes les 66 lignes (une page), remplace la première ligne par 3 espaces. Mais la première ligne étant vide, cette commande que tu as laissée semble inutile.

    juste pouvoir indiquer le nom des colonne listées.
    Le code pour la ligne 5 de l'entête que tu as écrite fait le job. N'est-ce pas ?

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pr -3 dico.txt | awk '((NR-1)%66==0){print "Ceci est la ligne 1.";next;} ((NR-1)%66==4){print "Ceci est la ligne 5.";next;} 1'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/05/2020, 13h48
  2. [MySQL] Remplir plusieurs lignes d'une seule table avec le même formulaire
    Par zehni dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/09/2006, 12h12
  3. Réponses: 13
    Dernier message: 16/08/2006, 09h06
  4. Bouton radio sur plusieur ligne avec Border layout
    Par Bason_sensei dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 03/05/2006, 16h03
  5. lire plusieurs lignes avec fgetc
    Par Mousk dans le forum C
    Réponses: 7
    Dernier message: 25/03/2006, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo