a bash perintah menampilkan ini:
Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active
Saya ingin menyalurkannya ke sesuatu agar terlihat seperti ini:
Runtime Name: vmhba2:C0:T1:L14 Group State: active
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
yaitu menghapus setiap baris baru lainnya
Saya mencoba ... |tr "\nGroup" " "
tetapi menghapus semua baris baru dan memakan beberapa surat lainnya juga. Terima kasih
tr
sepenuhnya berdasarkan karakter: Anda meminta tr untuk menghapus baris baru dan semua 'G', 'r', 'o', 'u', dan 'p'.Jawaban:
tidak dapat menguji sekarang, tetapi
harus melakukannya
sumber
paste -d ' ' - -
akan menambah ruang sebagai gantinya jika diperlukan)-
? Terima kasihpaste
digunakan untuk menggabungkan baris-baris dari file:paste file1 file2 file3 ...
. Jika salah satu dari argumen "file" adalah "-", maka baris dibaca dari input standar. Jika ada 2 "-" argumen, maka tempel mengambil 2 baris dari stdin. Dan seterusnya. Lihat halaman manual .Satu kemungkinan adalah:
Jika nomor baris habis dibagi 2, akhiri dengan baris baru, jika tidak, akhiri dengan spasi.
(Diuji pada: CentOS 6, GNU Awk 3.1.7)
Menggunakan sed (lihat penjelasan ):
Bacaan lebih lanjut:
sumber
Jika ingin digunakan
sed
, tidak ada alasan untuk membaca seluruh file ke dalam memori. Anda dapat menggabungkan setiap baris lain seperti ini:Gunakan karakter apa pun yang Anda suka sebagai ganti spasi.
Berikut cara lain menggunakan awk:
The
if/else
menangani kasus di mana ada ganjil baris dalam berkas. Tanpa itu, baris terakhir yang aneh akan dicetak dua kali. Kalau tidak, untuk perbandingan, Anda bisa melakukan:sumber
awk '{printf "%s", $0; $0=""; getline; print " " $0}'
Cara paling idiomatis untuk melakukannya
awk
adalah sebagai berikut:Ini menghasilkan:
Untuk menjelaskannya, kita perlu mendefinisikan masing-masing variabel bawaan:
RS
pemisah rekaman. Default ke\n
(baris baru).ORS
pemisah catatan keluaran. Default ke\n
(baris baru).FS
pemisah bidang. Default ke(spasi).
NR
jumlah catatan.Karena pemisah rekaman default adalah baris baru, catatan adalah, sebagai default, sebuah baris.
NR%2
adalah modulus dariNR/2
, sehingga akan menjadi salah satu0
atau1
.0
untuk garis genap dan1
garis ganjil.var=condition?condition_if_true:condition_if_false
adalah operator ternary.Secara keseluruhan, mengatakan
ORS=NR%2?FS:RS
kita mendefinisikan pemisah catatan output:2k + 1
, yaitu, pada garis genap, maka pemisah rekaman keluaran diatur keFS
, yaitu, spasi.2k
, yaitu, pada garis ganjil, maka pemisah rekaman keluaran diatur keRS
, yaitu, baris baru.Dengan cara ini, garis ganjil diakhiri dengan spasi, yang kemudian bergabung dengan baris berikutnya. Setelah baris itu, baris baru dicetak.
Info lebih lanjut di idiomatic awk .
sumber
Ini berfungsi untuk saya di Linux:
Ini menggantikan ruang kosong untuk karakter baris baru; Anda harus keluar dari karakter baris baru agar sesuatu berfungsi dengan benar.
sumber
Dalam bash:
sumber
Jika Perl adalah opsi:
perl -pe 's/\n/ / if $. % 2 == 1' file
s/\n/ /
menggantikan baris baru dengan spasi$.
adalah nomor barissumber
Bagaimana kalau menggunakan
grep
?sumber