OVH Cloud OVH Cloud

For Grep ?

2 réponses
Avatar
NoSpam
Bonjour à tous,

nouveau dans le monde d'unix je cherche à faire quelque chose de simple
(je le sais) mais qui m'echappe.

Il s'agit de lire le contenu d'un fichier et sur chaque ligne de faire
un grep en fonction du mot qui va bien, jusque là ça va.

Savez vous comment faire avec une boucle For pour lire la 1ere ligne,
récupérer l'info et ensuite lire la 2eme ligne et son info et acoller
les 2 infos à la suite ? Sachant qu'il y a beaucoup de lignes et que la
ligne 1 va avec la 2 la 3 avec 4 etc etc etc.

Pour avoir en résultat info1 info2
info3 info4 etc

2 réponses

Avatar
Stephane Chazelas
On Wed, 21 Jun 2006 10:08:06 +0200, NoSpam wrote:
Bonjour à tous,

nouveau dans le monde d'unix je cherche à faire quelque chose de simple
(je le sais) mais qui m'echappe.

Il s'agit de lire le contenu d'un fichier et sur chaque ligne de faire
un grep en fonction du mot qui va bien, jusque là ça va.

Savez vous comment faire avec une boucle For pour lire la 1ere ligne,
récupérer l'info et ensuite lire la 2eme ligne et son info et acoller
les 2 infos à la suite ? Sachant qu'il y a beaucoup de lignes et que la
ligne 1 va avec la 2 la 3 avec 4 etc etc etc.

Pour avoir en résultat info1 info2
info3 info4 etc
[...]


Problemes de concepts. Si tu veux faire une boucle for, il te
faut un language de programmation comme C ou perl. Les shells
ont un support pour les boucles, mais ce n'est pas comme ca
qu'on les utilise.

Les commandes qui filtrent du texte font une boucle implicite:
tant que ligne := next ligne, faire action demandee par
l'utilisateur.

Par exemple:

< fichier grep pattern

dit a grep de chercher pattern pour chaque ligne d'input (et de
l'afficher sur l'output s'il le trouve).

On peut faire toute sorte d'autres operations avec toute sorte
d'autres commandes (cut pour couper, paste, tr, sed...) jusqu'a
awk qui permet de faire des trucs tres compliqué car il possede
un language de programmation qui permet de faire plein
d'operations a la fois sur chaque ligne lue.

Dans ton cas, si je comprends bien, tu veux faire:

paste -s -d ' n' fichier

Que tu peux aussi faire avec sed:

sed 'N;s/n/ /' fichier

ou awk:

awk '
{
if ((getline nextline) > 0)
$0 = $0 " " nextline
print
}'

--
Stephane

Avatar
NoSpam
On Wed, 21 Jun 2006 10:08:06 +0200, NoSpam wrote:
Bonjour à tous,

nouveau dans le monde d'unix je cherche à faire quelque chose de simple
(je le sais) mais qui m'echappe.

Il s'agit de lire le contenu d'un fichier et sur chaque ligne de faire
un grep en fonction du mot qui va bien, jusque là ça va.

Savez vous comment faire avec une boucle For pour lire la 1ere ligne,
récupérer l'info et ensuite lire la 2eme ligne et son info et acoller
les 2 infos à la suite ? Sachant qu'il y a beaucoup de lignes et que la
ligne 1 va avec la 2 la 3 avec 4 etc etc etc.

Pour avoir en résultat info1 info2
info3 info4 etc
[...]


Problemes de concepts. Si tu veux faire une boucle for, il te
faut un language de programmation comme C ou perl. Les shells
ont un support pour les boucles, mais ce n'est pas comme ca
qu'on les utilise.

Les commandes qui filtrent du texte font une boucle implicite:
tant que ligne := next ligne, faire action demandee par
l'utilisateur.

Par exemple:

< fichier grep pattern

dit a grep de chercher pattern pour chaque ligne d'input (et de
l'afficher sur l'output s'il le trouve).

On peut faire toute sorte d'autres operations avec toute sorte
d'autres commandes (cut pour couper, paste, tr, sed...) jusqu'a
awk qui permet de faire des trucs tres compliqué car il possede
un language de programmation qui permet de faire plein
d'operations a la fois sur chaque ligne lue.

Dans ton cas, si je comprends bien, tu veux faire:

paste -s -d ' n' fichier

Que tu peux aussi faire avec sed:

sed 'N;s/n/ /' fichier

ou awk:

awk '
{
if ((getline nextline) > 0)
$0 = $0 " " nextline
print
}'


Merci bien pour la réponse, je vais regarder de côté là.