GNU/Linux >> Znalost Linux >  >> Linux

Změňte pořadí řádků v souboru

$ seq 9 | sed -n 'p;n;h;n;G;p'
1
3
2
4
6
5
7
9
8

To znamená p vytisknout aktuální řádek, získat n ext one, h starý, získejte n ext one, G et podržený řádek (připoj ho do prostoru vzoru) a p vytiskněte prostor dvouřádkového vzoru s prohozeným třetím a druhým řádkem.


Pomocí awk a celočíselná matematika:

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

Operátor modulu provede celočíselné dělení a vrátí zbytek, takže pro každý řádek vrátí sekvenci 1, 2, 0, 1, 2, 0 [...]. Když to víme, uložíme si vstup na řádcích, kde je modul 2, na později – v podstatě hned po vytištění vstupu, když je nula.


Další auk přístup:

awk '{print $0; if ((getline L2)>0 && (getline L3)>0){ print L3 ORS L2 }}' file

Výstup:

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 - extrakty další 2 záznamy, pokud existují

  • každý 2. a 3. záznam je přiřazen k L2 a L3 proměnné respektive


Linux
  1. Tisknout čáry mezi (a včetně) dvěma vzory?

  2. Počítat řádky v souboru?

  3. Změnit oprávnění souboru

  1. Pořadí přesměrování?

  2. Nastavení/změna atributu ctime nebo Change time u souboru

  3. Jak získat pouze počet řádků souboru

  1. Jak procházet řádky souboru?

  2. The Bash ‘?

  3. Vytisknout obsah souboru bez prvního a posledního řádku?