GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membagi file dan menyimpan baris pertama di setiap bagian?

One-liner ini akan membagi csv besar menjadi potongan-potongan dari 999 record, mempertahankan baris header di bagian atas masing-masing (jadi 999 record + 1 header =1000 baris)

cat bigFile.csv | parallel --header : --pipe -N999 'cat >file_{#}.csv'

Berdasarkan jawaban Ole Tange.

Lihat komentar untuk beberapa kiat tentang pemasangan paralel


Ini milik robhruska skrip dibersihkan sedikit:

tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
    head -n 1 file.txt > tmp_file
    cat "$file" >> tmp_file
    mv -f tmp_file "$file"
done

Saya menghapus wc , cut , ls dan echo di tempat-tempat di mana mereka tidak perlu. Saya mengubah beberapa nama file agar lebih bermakna. Saya membaginya menjadi beberapa baris hanya untuk membuatnya lebih mudah dibaca.

Jika Anda ingin tampil mewah, Anda bisa menggunakan mktemp atau tempfile untuk membuat nama file sementara alih-alih menggunakan kode keras.

Edit

Menggunakan GNU split itu mungkin untuk melakukan ini:

split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_

Rusak agar mudah dibaca:

split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_

Ketika --filter ditentukan, split menjalankan perintah (fungsi dalam hal ini, yang harus diekspor) untuk setiap file keluaran dan menetapkan variabel FILE , di lingkungan perintah, ke nama file.

Skrip atau fungsi filter dapat melakukan manipulasi apa pun yang diinginkannya pada konten keluaran atau bahkan nama file. Contoh yang terakhir mungkin untuk menghasilkan nama file tetap di direktori variabel:> "$FILE/data.dat" Misalnya.


Anda dapat menggunakan fungsionalitas --filter baru di GNU coreutils split>=8.13 (2011):

tail -n +2 FILE.in | split -l 50 - --filter='sh -c "{ head -n1 FILE.in; cat; } > $FILE"'

Linux
  1. Cara Mengubah Izin dan Pemilik melalui Command Line

  2. Cara Menyisipkan Teks di awal setiap baris di Vim

  3. Bagaimana Melewati Garis File?

  1. Bagaimana Menemukan Jenis File Img Dan Memasangnya?

  2. Bagaimana Mengurai Setiap Baris File Teks Sebagai Argumen Untuk Perintah?

  3. Bagaimana cara mengarahkan stderr dan stdout ke file berbeda di baris yang sama dalam skrip?

  1. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  2. Cara Memisahkan Dan Menggabungkan File Dari Baris Perintah Di Linux

  3. Bagaimana Anda mem-gunzip file dan menyimpan file .gz?