2011-08-09 3 views
1

Bonjour J'utilise sed de diviser un fichier en deuxfichier Linux spliting

J'ai un fichier qui a un séparateur personnalisé «/-sep-/» et je veux diviser le fichier dans lequel le séparateur est

J'ai actuellement:

sed -n '1,/-sep-/ {p}' /export/data.temp > /export/data.sql.md5 

sed -n '/-sep-/,$ {p}' /export/data.temp > /export/data.sql 

mais le fichier contient 1/-sep-/à la fin et le fichier commence par deux/-sep-/

comment puis-je gérer cela !?

noter que sur le fichier que je dois supprimer une ligne de rupture et/-sep-/et sur le fichier 2 retirer la/-sep-/et une ligne de rupture: S

+0

Doit utiliser 'sed'? Pour mon exemple d'entrée 'csplit /export/data.temp '/ -sep- /' '%. *%'' Fonctionne, seuls les noms de fichiers ne peuvent pas être générés comme dans votre code. – manatwork

Répondre

3

invertissent: lui dire que pas imprimer à la place.

sed '/-sep-/Q' /export/data.temp > /export/data.sql.md5 
sed '1,/-sep-/d'/export/data.temp > /export/data.sql 

(.. En ce qui concerne cette ligne de rupture, je ne le comprenait pas une entrée de l'échantillon serait probablement aider)

Par ailleurs, votre code d'origine n'a besoin que petit ajout à faire ce que vous voulez:

sed -n '1,/-sep-/{/-sep-/!p}' /export/data.temp > /export/data.sql.md5 
sed -n '/-sep-/,${/-sep-/!p}' /export/data.temp > /export/data.sql 
+0

Merci beaucoup: D – Killercode

3
$ cat >testfile 
a 
a 
a 
a 
/-sep-/ 
b 
b 
b 
b 

puis

$ csplit testfile '/-sep-/' '//' 
8 
8 
8 
$ head -n 999 xx* 
==> xx00 <== 
a 
a 
a 
a 

==> xx01 <== 
/-sep-/ 

==> xx02 <== 
b 
b 
b 
b 
1
sed -n '/-sep-/q; p' /export/data.temp > /export/data.sql.md5 
sed -n '/-sep-/,$ {p}' /export/data.temp | sed '1d' > /export/data.sql 

Peut-être plus facile de le faire en une seule passe avec awk:

awk -v out=/export/data.sql.md5 -v f2=/export/data.sql ' 
    /-sep-/ { out=f2; next} 
    { print > out } 
' /exourt/data.temp 
+0

Cette solution "awk" est très agréable. – glglgl