extraction d'une partie d'un fichier sous condition (sed) - Shell/Batch - Programmation
Marsh Posté le 02-06-2006 à 15:57:19
aie, sa pique la tête ça! je pense que je le ferais par prog je ne metrise pas assez sed/awk pour ça.. mais pourquoi ne pas isoler les paragraphes dans un premier temps en cherchant les marqueurs (avec sed), et chercher dedans la presence/absence de tes chaineS?
Marsh Posté le 02-06-2006 à 16:30:57
bon, je reviens à ton problème, codé mais sans sed/awk... façon brutal. le code à la fin est à personnaliser. Par contre curieux de voir le résultat avec sed/awk, le code risque d'etre dense
Code :
|
Marsh Posté le 02-06-2006 à 16:50:20
en perl en une ligne
pour ceux avec XXX
Code :
|
pour ceux sans:
Code :
|
Marsh Posté le 06-06-2006 à 10:51:11
J'ai eu la reponse et j'imagine qu'elle vous interesse.
$ sed -e's/\(^DDD.*\)/RECORD_SEP\1/' -e 's/\(^FFF.*\)/\1RECORD_SEP/' test |awk 'BEGIN{ RS="RECORD_SEP" } /DDD.*XXX.*FFF.*/ { print $0 }'
DDD blablabla
blablablaoo
lsdqkgsqdXXX blablabla
FFF blablabladd
$ sed -e's/\(^DDD.*\)/RECORD_SEP\1/' -e 's/\(^FFF.*\)/\1RECORD_SEP/' test |awk 'BEGIN{ RS="RECORD_SEP" } !/DDD.*XXX.*FFF.*/ && /DDD.*FFF.*/ { print $0 }'
DDDblablabla
blablablalll
blablablammmmmmmm
FFF blablablass
DDD blablablaqq
blablablasd
FFF blablabla
c'est simple et efficace
Marsh Posté le 07-06-2006 à 17:50:01
ma version, que avec SED :
cat MonFichier | sed -n '/^DDD/,/^FFF/{
H
/^FFF/g
}
/DDD.*.*FFF/{
/DDD.*XXX.*FFF/w avec.txt
/DDD.*XXX.*FFF/!w sans.txt
s/^.*$//
x
}
'
PS: les retours a la ligne sont necessaires du fait des "{", "}"
eventuellement, ce qui est en rouge, tu le mets dans un fichier et tu fais
cat MonFichier | sed -n -f FicCommandeSED.txt
Marsh Posté le 01-06-2006 à 10:35:11
Extraction de chaine avec sed
Sur Unix, jai un fichier composé de plusieurs paragraphes.
Tous les paragraphes commence par DDD et finissent par FFF.
Certain paragraphes contiennent la chaine XXX.
Exemple
DDDblablabla
blablablalll
blablablammmmmmmm
FFF blablablass
DDD blablabla
blablablaoo
lsdqkgsqdXXX blablabla
FFF blablabladd
DDD blablablaqq
blablablasd
FFF blablabla
sed -en "/^DDD/ , /^FFF/p" -en "/XXX/w resultat" file
extrait tout le fichier moins la ligne contenant XXX
Jai tourné le sed et le awk dans tous les sens mais je navance plus.
Merci