2017-01-30 2 views
-1

ich einen Text habe wie folgt:Wie ein Muster von Linien zu erzeugen, die in verschiedenen Spalten mit einem Texteditor

a text is present 
for a few lines 
which I dont want 
to edit 
1 2 ab 
2 3 ab 
3 4 ab 
4 5 ab 
5 
6 
7 
8 

Jetzt würde Ich mag aufsteigende Reihenfolge der Zahlen in der zweiten Spalte erzeugen und die dritte Spalte gefüllt mit der Schnur "ab" wie folgt.

a text is present 
for a few lines 
which I dont want 
to edit 
1 2 ab 
2 3 ab 
3 4 ab 
4 5 ab 
5 6 ab 
6 7 ab 
7 8 ab 
8 9 ab 

Antwort

2

Dies könnte das sein, was Sie suchen:

$ awk '{$2=($2?$2:p[2]+1); $3=($3?$3:p[3]); split($0,p)} 1' file 
1 2 ab 
2 3 ab 
3 4 ab 
4 5 ab 
5 6 ab 
6 7 ab 
7 8 ab 
8 9 ab 

Angesichts Ihrer neuen Anforderung 100 die obigen Transformationen in Zeile zu starten:

awk 'NR>99{$2=($2?$2:p[2]+1); $3=($3?$3:p[3]); split($0,p)} 1' file 
+0

Hallo, der Befehl awk funktioniert gut. Allerdings habe ich am Anfang der Textdatei einen Text, den ich nicht stören möchte. Das heißt, ich möchte, dass der Befehl von einer bestimmten Zeile aus arbeitet, sagen wir die 100. Zeile. Wie kann ich das ausarbeiten? –

+1

@SaideepPavuluri Bitte verschwenden Sie von Anfang an alle Anforderungen an die Frage. –

+0

@James es tut mir leid mein Fehler, ich war nicht klar über meine Fallbeschreibung. Wie in der Frage bearbeitet, habe ich Text, den ich nicht ändern möchte und möchte die Ausgabe, wie Sie für die Zahlen, die nach wenigen Zeilen beginnen, erwähnt haben. –

1

Eine weitere in awk:

$ awk 'NR>5 && NF==1{$2=1+$1;$3="ab"}1' file 
a text is present 
for a few lines 
which I dont want 
to edit 
1 2 ab 
2 3 ab 
3 4 ab 
4 5 ab 
5 6 ab 
6 7 ab 
7 8 ab 
8 9 ab 

Sie können den Sta steuern Erstellen Sie einen Datensatz mit NR>5 oder welcher Linie auch immer Sie beginnen möchten.

0

Vim:

:g/\d\+\s*$/ %s:\v\d+ (\d+) ab\_s*\d\s*$\zs:\=printf(" %d ab",submatch(1)+1): 
0

in Vim:

qa 
    :%s/\v(\d+.+)(\n\d+)$/\1\2\1/ 
    w<C-a> 
    @a 
q 
@a 

Dies ist eine rekursive Makro, das die erste Zeile auffüllt, die nur eine Spalte mit der zweiten und dritten Spalte der Zeile über hat, Erhöht dann die zweite Spalte.

Verwandte Themen