Meine Eingabedatei ist,
ami21 ami65
ami67 ami66
ami88 ami76 ami29
ami55
ami54
ami32
Mit einer einzigen Befehlszeile brauche ich die Ausgabe als,
ami22 ami66
ami68 ami67
ami89 ami77 ami30
ami56
ami55
ami33
Ich habe den Befehl verwendet
awk -vRS=ami '{$0=$0+1;ORS=RT}++n' inputfile > outputfile
aber ich habe die ausgabedatei als ami21ami65ami67ami66ami88ami76ami29ami55ami54ami32
dh alle Zeichenfolgen werden in derselben Zeile und ohne Leerzeichen geschrieben. Könnte mir jemand eine bessere Kommandozeile empfehlen.
command-line
sed
awk
Tamal
quelle
quelle
Antworten:
perl
Dies könnte einfacher sein :-pe
: Durchlaufen Sie die Datei zeilenweise und drucken Sie jede Zeile nach der Auswertung des Ausdruckss/(\d+)/$1+1/e
: Ordne eine Zahl (\d+
) zu und ersetze sie durch ihr Inkrement ($1+1
), mite
dem Perl angewiesen wird, die Ersetzung zu bewerten.Mit
awk
müssen Sie das Leerzeichen in das Datensatztrennzeichen aufnehmen:quelle
Abgesehen von der hervorragenden Antwort von "muru", wenn Sie etwas anderes ausprobieren möchten, gibt es hier einen pythonischen Weg:
quelle
Eine weitere Python-Lösung durch
re.sub
.quelle