Histoire de tubes

Le
Lie Algebra
Bonjour,

j'ai un fichier fic qui comporte comme deux premières lignes:

Title: untitre
Genre: ungenre

Le but est d'obtenir la sortie sur une seule ligne: untitre (ungenre).
(l'espace étant uniquement centré)

J'y parviens (sous bash) avec :

egrep "^Title|^Genre" fic| awk -F ":[ ]*" '{print $2}'|sed "2s/.*/ (&)/"
|awk 'BEGIN{ORS=""} {print} END{print ""}'

Et ca me paraît bien long, je me doute bien qu'il y a des alternatives
plus simples mais je n'en vois pas.

Merci d'avance de votre aide.

++
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #736983
2007-05-18, 11:02(+02), Lie Algebra:
Bonjour,

j'ai un fichier fic qui comporte comme deux premières lignes:

Title: untitre
Genre: ungenre

Le but est d'obtenir la sortie sur une seule ligne: untitre (ungenre).
(l'espace étant uniquement centré)

J'y parviens (sous bash) avec :

egrep "^Title|^Genre" fic| awk -F ":[ ]*" '{print $2}'|sed "2s/.*/ (&)/"
|awk 'BEGIN{ORS=""} {print} END{print "n"}'

Et ca me paraît bien long, je me doute bien qu'il y a des alternatives
plus simples mais je n'en vois pas.

Merci d'avance de votre aide.
[...]


sed 'N;s/^Title:[[:blank:]]*(.*)nGenre:[[:blank:]]*(.*)/1 (2)/;q'

--
Stéphane

Pascal Bourguignon
Le #736982
Lie Algebra
Bonjour,

j'ai un fichier fic qui comporte comme deux premières lignes:

Title: untitre
Genre: ungenre

Le but est d'obtenir la sortie sur une seule ligne: untitre (ungenre).
(l'espace étant uniquement centré)

J'y parviens (sous bash) avec :

egrep "^Title|^Genre" fic| awk -F ":[ ]*" '{print $2}'|sed "2s/.*/
(&)/" |awk 'BEGIN{ORS=""} {print} END{print "n"}'

Et ca me paraît bien long, je me doute bien qu'il y a des alternatives
plus simples mais je n'en vois pas.


( read title thetitle ; read genre thegenre ; echo "$thetitle $thegenre" ) <fic

C'est plus simple que sed, car on ne fork pas. ;-)


--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.

Lie Algebra
Le #736981
Les deux solutions me plaisent assez.Pendant que j'essaye toujours de
comprendre la première, je peux, grâce à la seconde, temporiser mes
efforts. En fait, je ne trouve pas de doc suffisamment explicative sur
cet outil/langage.

Merci pour vos solutions ;)
Stephane Chazelas
Le #736767
2007-05-18, 11:49(+02), Pascal Bourguignon:
[...]
Title: untitre
Genre: ungenre

Le but est d'obtenir la sortie sur une seule ligne: untitre (ungenre).
(l'espace étant uniquement centré)

J'y parviens (sous bash) avec :

egrep "^Title|^Genre" fic| awk -F ":[ ]*" '{print $2}'|sed "2s/.*/
(&)/" |awk 'BEGIN{ORS=""} {print} END{print "n"}'

Et ca me paraît bien long, je me doute bien qu'il y a des alternatives
plus simples mais je n'en vois pas.


( read title thetitle ; read genre thegenre ; echo "$thetitle $thegenre" ) <fic

C'est plus simple que sed, car on ne fork pas. ;-)
[...]


En l'occurrence, a cause des ( ), tu as forké. Avec { }, tu
n'aurais forké qu'avec le Bourne shell. Tu as aussi oublié
l'option -r de read, et echo n'est pas la commande pour afficher
du texte variable. Note que cette solution enlevera les blancs
en fin de ligne (ce qui est probablement un plus).

unset IFS
{
read -r z title &&
read -r z genre &&
printf '%s (%s)n' "$title" "$genre"
} < fic

--
Stéphane


Pascal Bourguignon
Le #736766
Stephane Chazelas
2007-05-18, 11:49(+02), Pascal Bourguignon:
[...]
Title: untitre
Genre: ungenre

Le but est d'obtenir la sortie sur une seule ligne: untitre (ungenre).
(l'espace étant uniquement centré)

J'y parviens (sous bash) avec :

egrep "^Title|^Genre" fic| awk -F ":[ ]*" '{print $2}'|sed "2s/.*/
(&)/" |awk 'BEGIN{ORS=""} {print} END{print "n"}'

Et ca me paraît bien long, je me doute bien qu'il y a des alternatives
plus simples mais je n'en vois pas.


( read title thetitle ; read genre thegenre ; echo "$thetitle $thegenre" ) <fic

C'est plus simple que sed, car on ne fork pas. ;-)
[...]


En l'occurrence, a cause des ( ), tu as forké. Avec { }, tu
n'aurais forké qu'avec le Bourne shell.


Outch! J'aurais du vérifier dans la doc, j'avais un doute...


Tu as aussi oublié
l'option -r de read, et echo n'est pas la commande pour afficher
du texte variable. Note que cette solution enlevera les blancs
en fin de ligne (ce qui est probablement un plus).

unset IFS
{
read -r z title &&
read -r z genre &&
printf '%s (%s)n' "$title" "$genre"
} < fic

--
Stéphane


Parfait! :-)

--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.



Publicité
Poster une réponse
Anonyme