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 :
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?