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 splittetapi 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 splittetapi membuat beberapa potongan.
Jawaban:
Cara termudah adalah menggunakan headdan tail:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Itu akan menempatkan 1000 baris pertama dari input-fileke output1, dan semua baris dari 1001 sampai akhiroutput2
Saya pikir itu splitadalah pendekatan terbaik Anda.
Coba gunakan -l xxxxopsi, di mana xxxx adalah jumlah baris yang Anda inginkan di setiap file (defaultnya adalah 1000).
Anda dapat menggunakan -n yyopsi ini jika Anda lebih mementingkan jumlah file yang dibuat. Penggunaan -n 2akan 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 splitman wcsplit -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??.
Ini adalah pekerjaan untuk csplit:
csplit -s infile 1001
akan sdibagi 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 -fdan menentukan awalan :
csplit -sf piece. infile 1001
menghasilkan dua file bernama piece.00danpiece.01
Dengan cerdas headAnda 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 csplitperintah 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?