Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Histoire de tubes

5 réponses
Avatar
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.

++

5 réponses

Avatar
Stephane Chazelas
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

Avatar
Pascal Bourguignon
Lie Algebra writes:

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.

Avatar
Lie Algebra
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 ;)
Avatar
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. 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


Avatar
Pascal Bourguignon
Stephane Chazelas writes:

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.