Saya memiliki file vcf yang berisi banyak vcard.
Saat mengimpor file vcf ke outlook sepertinya hanya mengimpor vcard pertama.
Karenanya saya ingin membaginya.
Mengingat bahwa vcard dimulai dengan
BEGIN:VCARD
dan diakhiri dengan
END:VCARD
Apa cara terbaik untuk membagi setiap vcard ke dalam file itu sendiri.
Terima kasih
MEMPERBARUI
Terima kasih atas semua tanggapannya. Seperti halnya pertanyaan semacam ini, ada berbagai cara untuk menguliti kucing. Inilah alasan mengapa saya memilih yang saya lakukan.
PEMBULATAN
Berikut adalah ringkasan dari apa yang saya sukai dari setiap jawaban dan apa yang mendorong saya untuk memilih salah satu dari mereka.
csplit
: Saya sangat menyukai keringkasan metode ini. Saya hanya berharap itu bisa juga mengatur ekstensi file.gawk
: Itu melakukan semua yang saya minta.paralell
: Bekerja. Tetapi saya harus menginstal hal-hal baru. (itu juga memutuskan untuk membuat dir / bin baru di dir rumah saya)perl
: Saya suka itu membuat vcf berdasarkan nama kontak. Tapi opsi -o tidak benar-benar berfungsi
Kesimpulan
- Jadi yang pertama pergi adalah
perl
karena agak rusak - Selanjutnya adalah
paralell
karena saya harus menginstal hal-hal baru - Selanjutnya adalah
csplit
, karena sejauh yang saya bisa lihat itu tidak dapat membuat ekstensi pada file output - Jadi penghargaan diberikan kepada gawk, karena menjadi utilitas yang sudah tersedia, dan cukup fleksibel sehingga saya dapat memotong dan mengubah nama file sedikit. Tanda bonus
cmp
juga :)
-b
?Jawaban:
Anda dapat menggunakan awk untuk pekerjaan itu:
Detail
Baris awk bekerja seperti ini:
a
adalah penghitung yang ditambahkan pada setiapBEGIN:VCARD
baris dan pada saat yang sama nama file keluaran dibangun menggunakan sprintf (disimpan dalamfn
). Untuk setiap baris, baris saat ini ($0
) ditambahkan ke file saat ini (dinamaifn
).Yang terakhir
echo $?
berarticmp
berhasil, yaitu semua file tunggal yang disatukan sama dengan contoh asli contoh vcf.Perhatikan bahwa redirection output di awk berfungsi berbeda dari pada di shell. Itu artinya dengan
> fn
awk cek terlebih dahulu apakah file tersebut sudah terbuka. Jika sudah terbuka maka awk menambahkannya . Jika tidak maka itu akan terbuka dan memotongnya.Karena logika pengalihan ini kita harus secara eksplisit menutup file yang dibuka secara implisit, karena jika tidak panggilan akan mencapai batas file terbuka dalam kasus di mana file input berisi banyak catatan.
sumber
sumber
Versi Gnu dari csplit dapat mengatur ekstensi - Jawaban Ignacio saya pikir paling ringkas, hanya perlu sedikit penyesuaian terakhir untuk mendapatkan ekstensi - menggunakan format 'printf':
Berikut cuplikan yang relevan dari
csplit
halaman man gnu :sumber
Anda dapat menggunakan skrip ini untuk melakukan pekerjaan itu. Ini disebut split-vcf-file .
Contoh penggunaan
Untuk menjalankan skrip:
sumber
Menggunakan GNU Parallel yang bisa Anda lakukan:
Atau jika Anda dapat menyangkal http://oletange.blogspot.com/2013/10/useless-use-of-cat.html Anda dapat menggunakan ini sebagai gantinya:
Lihat lebih banyak contoh: http://www.gnu.org/software/parallel/man.html
Tonton video intro: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Instalasi 10 detik:
sumber