GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menghapus Beberapa Baris Acak Dari File Teks Menggunakan Sed?

Saya ingin menghapus 10 baris acak dari file teks yang memiliki 90 baris dan kemudian menampilkan ini ke file baru. Saya sudah mencoba melakukan ini menggunakan sed, tetapi saya memiliki dua masalah. Saya menggunakan:

sed -i $((1 + RANDOM & 90))d input.txt > output.txt

dan kemudian menjalankan perintah 10 kali (saya berasumsi ada cara yang lebih baik untuk melakukan ini!)

Masalah pertama yang saya miliki adalah saya mendapatkan kesalahan:

sed:-e ekspresi #1, karakter 2:penggunaan alamat baris yang tidak valid 0

Saya berasumsi ini ada hubungannya dengan fakta bahwa itu mungkin telah menghapus baris 1 dan sedang mencoba lagi.

Masalah kedua adalah terkadang tidak ada yang ditulis ke file output, meskipun itu berfungsi sebelum menggunakan perintah yang sama.

Jawaban yang Diterima:

Anda mungkin ingin menggunakan RANDOM % 90 daripada & . Dari situlah angka nol berasal (menghapus baris 1 tidak apa-apa, pada putaran berikutnya, garis akan diberi nomor 1 .. 89).

Namun, ada masalah:Rumusnya bisa menghasilkan angka yang sama beberapa kali. Untuk mencegahnya, gunakan pendekatan yang berbeda:acak angka dan pilih sepuluh yang pertama:

shuf -i1-90 -n10 | sed 's/$/d/' | sed -f- input > output

Jika Anda tidak suka sed menghasilkan sed skrip, Anda dapat menggunakan printf , juga:

sed -f <( printf %dd;  $(shuf -i1-90 -n10) ) input > output

Linux
  1. Bagaimana Cara Menghapus N Baris Pertama Dari File Ascii Menggunakan Perintah Shell?

  2. Hapus baris ganjil atau genap dari file teks

  3. Temukan dan ganti teks dalam file di antara rentang baris menggunakan sed

  1. Bagaimana cara Menghapus baris 'n' Pertama/Terakhir dari output perintah di Shell?

  2. Bagaimana Cara Menambahkan Beberapa Baris Ke File?

  3. Bagaimana cara menampilkan baris tertentu dari file teks di Linux?

  1. Cara Menghapus Semua Baris File di Vim

  2. Bagaimana cara menghapus baris baru dari file teks?

  3. Hapus kemunculan string dalam file teks