Mengajukan:
Data inserted into table. Total count 13
No error occurred
Data inserted into table. Total count 45
No error occurred
Data inserted into table. Total count 14
No error occurred
Data inserted into table. Total count 90
No error occurred
File output yang diharapkan:
Data inserted into table. Total count 13
Data inserted into table. Total count 45
Data inserted into table. Total count 14
Data inserted into table. Total count 90
Saya ingin output terlihat seperti ini: setiap baris kedua akan dihapus tetapi tidak akan ada celah di antara baris.
text-processing
sed
awk
pmaipmui
sumber
sumber
grep -v "No error occurred" file
ini perintah ini harus berfungsi ... apa yang telah dijawab @paul. Dalam file output, tidak akan ada baris yang mengandung "Tidak ada kesalahan terjadi" bagian ini.Jawaban:
Dengan
sed
:Dengan POSIX
awk
:Jika Anda lebih tua
awk
(sepertioawk
), Anda perlu:Dengan
ex
:akan mengedit file di tempat.
g
tandai perintah global/$/
cocokkan setiap baris+d
hapus baris berikutnyawq!
simpan semua perubahanPendekatan ini berbagi ideal yang sama dengan
sed
pendekatan, hapus setiap baris berikutnya dari baris saat ini mulai dari baris 1.Dengan
perl
:dan
perl6
:sumber
n\;d
alih-alih'n;d'
menyimpan karakter yang berharga tetapi logika itu keluar dari jendela saat Anda tidak perlu menggunakan-e
sakelar dan pengalihan file<
!sed -e 'n;d'
, menghemat satu karakter.n
perintah tulis pola spasi ke output standar jika-n
digunakan, lalu ganti spasi pola dengan baris berikutnya. Inilah setiap garis ganjil yang akan dicetakn
, bahkan garis kemudian dibaca ke dalam ruang pola tetapi hapus segera dengand
perintah`.Memecahkan ini dengan menghapus setiap baris kedua bisa menjadi rawan kesalahan (misalnya, ketika proses kadang-kadang menghasilkan dua baris yang bermakna, bukan satu). Mungkin lebih baik menyaring sampah:
Itu dapat dijalankan sebagai filter, Anda dapat menambahkan lebih banyak pola sampah di sini dan meningkatkan hasilnya.
sumber
Ассоrding ke pertanyaan, dengan GNU
sed
:akan menghapus setiap baris kedua tetapi saya ingin menawarkan baris filter dengan isinya:
atau dengan hasil yang sama
sumber
grep Data
dangrep -v 'No error'
Berikut cara menggunakan
sed
:Cara lain dengan GNU
sed
:Output dari perintah di atas:
sumber
shortest way using sed
?g
perintahnya?sed -n 'p;n'
cukup.g
. dihapus g dari perintah. :)Anda dapat mencoba dengan
awk
:atau Anda hanya dapat mencetak garis yang mengandung
Data inserted
:sumber
Jawaban lain, Anda bisa menggunakan vi / vim!
Dan kemudian jika file Anda adalah 500 baris (misalnya) ketik
Dan kemudian untuk menulis dan keluar ketik
Atau jika terjadi kesalahan dan Anda tidak ingin menyimpan:
Penjelasan:
sumber
Berikut cara yang berbeda untuk melakukannya:
Ini mengasumsikan bahwa garis bernomor ganjil tidak mengandung tab. Jika ya, maka Anda harus memilih karakter pemisah lain, misalnya di
:
sini:sumber
sed
dengan file besar (mis. 20 mil baris). Bagaimanapun, +1 tetapi sebenarnya, untuk menghindari sakit kepala, pilih pembatas yang tidak mungkin terjadi dalam file teks, seperti$'\002'
...seq 100000000 > 100mil.txt
. Thepaste|cut
solusi selesai dalam waktu sekitar 7,5 detik, vs hampir 12 untuksed
solusi. Tampaknya bisa diulang.grep
lebih cepat. Ubuntu 14.04 dengan alat GNU standar.paste
+cut
sangat dioptimalkan untuk pekerjaan mereka sehingga tidak mengherankan kombinasi mereka sangat cepat ...Pilihan lain (lebih pendek)
sumber
sed n\;d
, menambahkan-e
hanya kebiasaan saya.Ini juga memecahkan masalah, meskipun sedikit lebih lambat:
sumber