GNU/Linux >> Belajar Linux >  >> Linux

Linux – Pisahkan Satu Baris Menjadi Beberapa Baris, Karakter Baris Baru Hilang Untuk Semua Baris Dalam File Input?

Pertanyaan ini sudah memiliki jawaban di sini :Bagaimana cara memproses file teks multi kolom untuk mendapatkan file teks multi kolom lainnya?

(7 jawaban)
Tutup 3 tahun yang lalu.

Saya ada cara untuk membagi satu baris menjadi beberapa baris dengan 3 kolom.
Karakter baris baru tidak ada di akhir semua baris dalam file.

Saya mencoba menggunakan awk, tetapi itu membagi setiap kolom menjadi satu baris, bukan 3 kolom di setiap baris.

awk '{ gsub(",", "n") } 6' filename

di mana filename kontennya terlihat seperti:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O

Output yang diinginkan memiliki 3 kolom di setiap baris:

A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Jawaban yang Diterima:

Menggunakan awk

$ awk -v RS='[,n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cara kerjanya

  • -v RS='[,n]'

    Ini memberitahu awk untuk menggunakan kemunculan koma atau baris baru sebagai pemisah record.

  • a=$0; getline b; getline c

    Ini memberitahu awk untuk menyimpan baris saat ini dalam variabel a , baris berikutnya dalam variabel b , dan baris berikutnya setelah itu di variabel c .

  • print a,b,c

    Ini memberitahu awk untuk mencetak a , b , dan c

  • OFS=,

    Ini memberitahu awk untuk menggunakan koma sebagai pemisah bidang pada output.

Menggunakan tr dan paste

$ tr , 'n' <filename | paste -d, - - -
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cara kerjanya

  • tr , 'n' <filename

    Ini dibaca dari nama file saat mengonversi semua koma ke baris baru.

  • paste -d, - - -

    paste . ini untuk membaca tiga baris dari stdin (satu untuk setiap - ) dan rekatkan bersama-sama, masing-masing dipisahkan dengan koma (-d, ).

Alternatif awk

$ awk -v RS='[,n]' '{printf "%s%s",$0,(NR%3?",":"n")}' filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

Cara kerjanya

  • -v RS='[,n]'

    Ini memberitahu awk untuk menggunakan kemunculan koma atau baris baru sebagai pemisah record.

  • printf "%s%s",$0,(NR%3?",":"n")

    Ini memberitahu awk untuk mencetak baris saat ini diikuti dengan koma atau baris baru tergantung nilai nomor baris saat ini, NR , modulo 3.


Linux
  1. Hapus Baris Header Ekstra Dari File, Kecuali Baris Pertama?

  2. Bagaimana Cara Menambahkan Beberapa Baris Ke File?

  3. Popsicle – Beberapa Flasher File USB untuk Linux

  1. 8 tips untuk baris perintah Linux

  2. Cara Menghitung baris dalam file di UNIX/Linux

  3. Linux - periksa apakah ada baris kosong di akhir file

  1. Cara membagi satu file menjadi beberapa file berdasarkan baris

  2. 9 Contoh Perintah Split yang Berguna di Linux

  3. Mengubah banyak baris menjadi satu baris yang dipisahkan koma