GNU/Linux >> Belajar Linux >  >> Ubuntu

Pisahkan File Berdasarkan Set Baris yang Telah Ditentukan?

Saya ingin membagi file teks menurut kumpulan baris yang telah ditentukan sebelumnya.
Misalnya. Saya punya file

a
b
c
d
e
f

Dan kemudian saya memiliki set baris berikut (ini dapat disimpan namun lebih nyaman, pada satu file, banyak file,…).

1,2
3,6
5,4

Saya ingin membagi file saya sehingga saya mendapatkan 3 file kembali seperti:

file1

a
b

file2

c
f

file3

e
d

Jawaban yang Diterima:

Ini adalah bash skrip dengan asumsi file input Anda bernama infile dan rentang disimpan 1 per baris dalam file bernama splits:

i=1
for range in $(< splits); do
  sed -n "$(echo "$range" | cut -f1 -d, )p" infile > "file$i"
  sed -n "$(echo "$range" | cut -f2 -d, )p" infile >> "file$i"
  ((i++))
done

Ini hanya menggunakan sed untuk mencetak baris yang ditentukan oleh rentang, dan menyimpan setiap hasil sebagai file baru (file yang dibuat diberi nama file1 file2 file3 dll). Dua pemanggilan sed digunakan untuk mempertahankan urutan baris yang ditentukan.

Perhatikan bahwa tidak ada format atau pemeriksaan kesalahan yang dilakukan oleh skrip sederhana ini, dan file yang ada bernama mis. file1 akan ditimpa.

Alternatif yang disederhanakan (milik @muru) menggunakan while read dan membiarkan bash membagi rentang alih-alih memotong:

i=1
while IFS=',' read n1 n2 
do
    sed -n "$n1 p; $n2 p" infile > "file$i"
    ((i++))
done < splits

Jika urutan baris dalam file keluaran penting (misalnya baris 5,4 !=4,5), maka sed bit perlu dipecah menjadi dua pemanggilan terpisah yang mirip dengan skrip pertama.


Ubuntu
  1. Ubuntu – Membagi Audio Menjadi Beberapa Bagian Berdasarkan Stempel Waktu Dari File Teks Dengan Sox Atau Ffmpeg?

  2. Penggunaan Sed Untuk Memperbarui File Grub?

  3. Beberapa File Teks Ganti Dengan Sed?

  1. Cara membagi satu file menjadi beberapa file berdasarkan baris

  2. unix - membagi file .gz besar per baris

  3. Bagaimana cara mengatur file sebagai TIDAK dapat dieksekusi?

  1. Bagaimana Cara Mengganti String Dalam File?

  2. Tampilkan Semua File Hingga Pertandingan?

  3. Bagaimana Cara Menginstal Ubuntu Dari File Iso?