GNU/Linux >> Belajar Linux >  >> Ubuntu

Apakah Mungkin Dengan Gedit Atau Baris Perintah Untuk Memodifikasi Setiap Baris Keempat File Teks?

Saya mencoba mengonversi file teks menjadi spreadsheet yang dipisahkan tab. File teks saya adalah seperti ini:

Dog
Cat
Fish
Lizard
Wolf
Lion
Shark
Gecko
Coyote
Puma
Eel
Iguana

Dengan fungsi pencarian dan penggantian standar di Gedit atau LibreOffice, mudah untuk mengganti akhir baris dengan tab. Tetapi jika saya hanya menukar pengembalian carriage untuk tab, saya akan mendapatkan ini:

Dog   Cat   Fish   Lizard   Wolf   Lion   Shark   Gecko   Coyote   Puma   Eel   Iguana

Tapi yang perlu saya lakukan adalah membuatnya terlihat seperti ini:

Dog   Cat   Fish   Lizard
Wolf   Lion   Shark   Gecko  
Coyote   Puma   Eel   Iguana

Jadi, bisakah saya menukar setiap akhir karakter baris dengan tab kecuali untuk setiap baris keempat?

Saya tidak tahu apakah iterasi bersyarat semacam itu dapat dilakukan dengan ekspresi reguler di dalam program seperti Gedit atau LibreOffice, jadi mungkin ini perlu semacam fungsi baris perintah? Saya bahkan tidak tahu apa alat terbaik untuk memulai.

Pembaruan:

Saya mencoba perintah berikut:

sed 'N;N;N;s/\n/\t/g' file > file.tsv

paste - - - - < file > file.tsv

pr -aT -s$'\t' -4 file > file.tsv

xargs -d '\n' -n4 < inputfile.txt

Tetapi ketika saya mencoba membuka tsv yang dihasilkan file di LibreOffice, kolomnya kurang tepat. Saya tidak yakin apakah ini berarti saya tidak menjalankan perintah di atas dengan benar, atau jika saya melakukan kesalahan dalam fungsi impor LibreOffice:

Sekedar referensi, hasil yang diinginkan akan terlihat seperti ini:

Jawaban yang Diterima:

Anda bisa gunakan editor baris perintah seperti sed

sed 'N;N;N;s/\n/\t/g' file > file.tsv

atau, secara lebih terprogram, dengan menambahkan garis miring terbalik karakter lanjutan baris ke setiap baris yang ingin Anda gabung menggunakan n skip m G GNU sed alamat operator dan mengikutinya dengan one-liner klasik untuk bergabung dengan baris lanjutan:

sed '0~4! s/$/\t\\/' file | sed -e :a -e '/\\$/N; s/\\\n//; ta'

Lihat misalnya Penjelasan Sed One-Liners :

  1. Tambahkan baris ke baris berikutnya jika diakhiri dengan garis miring terbalik “\”.

    sed -e :a -e '/\\$/N; s/\\\n//; ta'
    

Namun IMHO akan lebih mudah dengan salah satu utilitas pemrosesan teks standar lainnya, mis.

paste - - - - < file > file.tsv

(jumlah - akan sesuai dengan jumlah kolom) atau

pr -aT -s$'\t' -4 file > file.tsv

(Anda dapat menghilangkan -s$'\t jika Anda tidak keberatan output dipisahkan oleh banyak tab).

Perilaku impor ulang aneh yang Anda amati hampir pasti karena file asli memiliki akhiran baris CRLF gaya Windows. Jika Anda perlu bekerja dengan file dari Windows, maka Anda dapat menggulung konversi ke dalam perintah dengan berbagai cara, mis.

tr -d '\r' < file.csv | paste - - - -

atau

sed 'N;N;N;s/\r\n/\t/g' file.csv

Yang pertama akan menghapus SEMUA carriage return sedangkan yang kedua akan mempertahankan CR di akhir setiap baris baru (yang mungkin Anda inginkan jika pengguna akhir yang dimaksud adalah Windows).

Terkait:Wacom Graphics Tablet Cth-480 / Ctl-480 Tidak Terdeteksi di Ubuntu 13.10 di Ubuntu?
Ubuntu
  1. Diurutkan dengan sort di baris perintah

  2. Salin dan tempel di baris perintah Linux dengan xclip

  3. Multi-Tugas di baris perintah dengan screenie

  1. menjalankan perintah terhadap setiap baris dalam file teks

  2. Unduh File di Ubuntu Menggunakan Command Line di sistem Ubuntu 20.04

  3. Buat file dengan menggunakan baris perintah di Linux

  1. Memanipulasi teks pada baris perintah dengan sed

  2. Beberapa File Teks Ganti Dengan Sed?

  3. Sedikit trik:pilih file atau baris acak di file dengan shuf