Saya memiliki file besar dan perlu dibagi menjadi dua file. Misalkan pada file pertama 1000 baris harus dipilih dan dimasukkan ke file lain dan hapus baris-baris itu di file pertama.
Saya mencoba menggunakan split
tetapi membuat beberapa potongan.
Saya memiliki file besar dan perlu dibagi menjadi dua file. Misalkan pada file pertama 1000 baris harus dipilih dan dimasukkan ke file lain dan hapus baris-baris itu di file pertama.
Saya mencoba menggunakan split
tetapi membuat beberapa potongan.
Jawaban:
Cara termudah adalah menggunakan head
dan tail
:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Itu akan menempatkan 1000 baris pertama dari input-file
ke output1
, dan semua baris dari 1001 sampai akhiroutput2
Saya pikir itu split
adalah pendekatan terbaik Anda.
Coba gunakan -l xxxx
opsi, di mana xxxx adalah jumlah baris yang Anda inginkan di setiap file (defaultnya adalah 1000).
Anda dapat menggunakan -n yy
opsi ini jika Anda lebih mementingkan jumlah file yang dibuat. Penggunaan -n 2
akan membagi file Anda menjadi hanya 2 bagian, tidak peduli jumlah baris dalam setiap file.
Anda dapat menghitung jumlah baris dalam file Anda dengan wc -l filename
. Ini adalah perintah 'wordcount' dengan opsi baris.
man split
man wc
split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
.
Ini adalah pekerjaan untuk csplit
:
csplit -s infile 1001
akan s
dibagi infile
, bagian pertama xx00
- hingga tetapi tidak termasuk baris 1001 dan bagian kedua xx01
- baris yang tersisa.
Anda dapat bermain dengan opsi jika Anda memerlukan nama file output yang berbeda misalnya menggunakan -f
dan menentukan awalan :
csplit -sf piece. infile 1001
menghasilkan dua file bernama piece.00
danpiece.01
Dengan cerdas head
Anda juga bisa melakukan sesuatu seperti:
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit
. Sangat bagus. (Saya hanya membaca daftar perintah POSIX dan mengalami kesulitan besar membungkus kepala saya di sekitar tujuan csplit
perintah pada awalnya. Ternyata itu benar-benar sangat sederhana.) :)
Cara sederhana untuk melakukan apa yang diminta pertanyaan, dalam satu perintah:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
atau, bagi Anda yang benar-benar benci mengetik perintah yang panjang dan intuitif,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --help
?