$ seq 9 | sed -n 'p;n;h;n;G;p'
1
3
2
4
6
5
7
9
8
Das heißt, p
gibt die aktuelle Zeile aus, erhält den n
ext eins, h
alt, nimm den n
ext eins, G
Setzen Sie die gehaltene Zeile (hängen Sie sie an den Musterbereich an) und p
Geben Sie diesen 2-zeiligen Musterraum mit vertauschter dritter und zweiter Zeile aus.
Mit awk
und ganzzahlige Mathematik:
awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay; delay=""} END { if(length(delay) != 0 ) { print delay } }' /path/to/input
Der Modulo-Operator führt eine ganzzahlige Division durch und gibt den Rest zurück, also gibt er für jede Zeile die Sequenz 1, 2, 0, 1, 2, 0 [...] zurück. Wenn wir das wissen, speichern wir einfach die Eingabe in Zeilen, in denen der Modulus 2 ist, für später – nämlich direkt nach dem Drucken der Eingabe, wenn sie null ist.
Noch ein awk Ansatz:
awk '{print $0; if ((getline L2)>0 && (getline L3)>0){ print L3 ORS L2 }}' file
Die Ausgabe:
gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
-
(getline L2)>0 && (getline L3)>0
- extrahiert die nächsten 2 Aufzeichnungen, falls vorhanden -
jeder 2. und 3. Datensatz wird
L2
zugeordnet undL3
Variablen bzw.