Hinzufügen zusätzlicher Zeilen nach jeder Zeile in einer Datei

Ich benötige Hilfe für die folgende Aufgabe für eine Datei mit ca. 1000 Zeilen.

EINGANG

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

AUSGABE

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

Ich weiß, dass der folgende Befehl die neue Zeile und den ersten Teil hinzufügen kann, wodurch die Ausgabe wie folgt erfolgt.

    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.* 
    ...

Wie mache ich den Rest? Vielen Dank im Voraus.

1
user2176228 27 Juni 2013 im 12:01

3 Antworten

Beste Antwort

Mein Versuch:

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

Oder Verwenden von && zwischen ./create.pl und mv (da mv wahrscheinlich nur benötigt wird, wenn ./create.pl korrekt ausgeführt wird):

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

Was gibt:

./create.pl 1eaj.out && mv complex.* 1eaj
./create.pl 1ezg.out && mv complex.* 1ezg
./create.pl 1f41.out && mv complex.* 1f41
3
Sergey Kurenkov 27 Juni 2013 im 08:09

Verwenden Sie Leerzeichen oder Punkte als Trennzeichen, um das gewünschte Wort zu extrahieren:

awk -F '[[:blank:].]+' '{print; print "mv complex.*", $4}' filename
2
glenn jackman 27 Juni 2013 im 10:35

Sie waren fast da:

$ 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
3
fedorqui 'SO stop harming' 27 Juni 2013 im 08:30