2013-06-27 3 views
1

ajouter des lignes supplémentaires après chaque ligne dans un fichierajouter des lignes supplémentaires après chaque ligne dans un fichier

J'ai besoin d'aide pour la tâche suivante pour fichier de 1000 lignes.

ENTRÉE

./create.pl  1eaj.out 
    ./create.pl  1ezg.out 
    ./create.pl  1f41.out 
    ... 

SORTIE

./create.pl  1eaj.out 
    mv complex.* 1eaj 
    ./create.pl  1ezg.out 
    mv complex.* 1ezg 
    ./create.pl  1f41.out 
    mv complex.* 1f41 
    ... 

Je sais commande suivante peut ajouter la nouvelle ligne et la première partie qui rend la sortie comme ci-dessous.

awk ' {print;} NR % 1 == 0 { print "mv complex.* "; }' 

    ./create.pl  1eaj.out 
    mv complex.* 
    ./create.pl  1ezg.out 
    mv complex.* 
    ./create.pl  1f41.out 
    mv complex.* 
    ... 

Comment faire le reste? Merci beaucoup d'avance.

+0

Vous pouvez envisager d'écrire une boucle pour obtenir ce dont vous avez besoin. – Bernhard

Répondre

3

Ma tentative:

sed -n 's/^\(\.\/create\.pl\)\s*\(.*\)\.out$/\1 \2.out\nmv complex.* \2/p' s.txt 

ou en utilisant && entre ./create.pl et mv (depuis mv est probablement nécessaire que lorsque ./create.pl est exécuté correctement):

sed -n 's/^\(\.\/create\.pl\)\s*\(.*\)\.out$/\1 \2.out \&\& mv complex.* \2/p' s.txt 

qui donne:

./create.pl 1eaj.out && mv complex.* 1eaj 
./create.pl 1ezg.out && mv complex.* 1ezg 
./create.pl 1f41.out && mv complex.* 1f41 
+0

Wow skwllsp. Merci beaucoup. Cela fonctionne bien. – user2176228

3

Vous étiez près de t ici:

$ awk '{print $1, $2, "\nmv complex.*", $2}' file 
./create.pl 1eaj.out 
mv complex.* 1eaj.out 
./create.pl 1ezg.out 
mv complex.* 1ezg.out 
./create.pl 1f41.out 
mv complex.* 1f41.out 
2

Utilisez des espaces ou des points comme séparateur pour extraire le mot dont vous avez besoin:

awk -F '[[:blank:].]+' '{print; print "mv complex.*", $4}' filename 
Questions connexes