GNU/Linux >> Belajar Linux >  >> Linux

Mengubah urutan baris dalam file

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

Yaitu, p cetak baris saat ini, dapatkan n ext satu, h lama, dapatkan n ext satu, G et baris yang dipegang (tambahkan ke ruang pola) dan p cetak ruang pola 2 baris dengan baris ketiga dan kedua ditukar.


Menggunakan awk dan matematika bilangan bulat:

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

Operator modulus melakukan pembagian bilangan bulat dan mengembalikan sisanya, sehingga untuk setiap baris akan mengembalikan urutan 1, 2, 0, 1, 2, 0 [...]. Mengetahui hal itu, kami hanya menyimpan input pada baris di mana modulusnya adalah 2 untuk nanti -- yaitu, setelah mencetak input ketika nilainya nol.


awk lainnya pendekatan:

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

Keluarannya:

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 - ekstrak 2 berikutnya catatan jika ada

  • setiap catatan ke-2 dan ke-3 ditetapkan ke L2 dan L3 variabel masing-masing


Linux
  1. Urutan Pengalihan?

  2. Cetak Garis Antara (dan Termasuk) Dua Pola?

  3. Cetak Konten File Tanpa Baris Pertama Dan Terakhir?

  1. Hitung Baris Dalam File?

  2. Mengubah Izin Berkas

  3. Cetak baris terakhir file, dari CLI

  1. Bagaimana cara menggunakan baris file sebagai argumen perintah?

  2. Mengatur/mengubah ctime atau Ubah atribut waktu pada file

  3. Cara hanya mendapatkan jumlah baris file