SORU
14 EKİM 2011, Cuma


Bireysel hatları bozmadan eşit parçalar halinde bir dosya bölünmüş, Nasıl?Unix:

Eğer eşit parçalar halinde bir dosya bölmek mümkün olup olmadığını merak ediyordum (düzenleme:= tüm son dışında) eşit, çizgisini bozmadan? Unıx split komutunu kullanarak, çizgiler yarıda kesilmiş olabilir. Bir yolu var ki, bölünmüş bir dosya içinde 5 eşit parçaya, ama yine de kapsar tüm hatlar (sorun değil eğer bir dosya olduğundan biraz daha büyük ya da daha küçük)? Sadece satır sayısını hesaplamak olabilir biliyorum, ama bir bash betiği içinde bir sürü dosya için bunu yapmak zorundayım. Çok teşekkürler!

CEVAP
14 EKİM 2011, Cuma


Eşit sayıda kastediyorsançizgiler,split bunun için bir seçenek vardır:

split --lines=75

Eğer gerçekten N eşit parçaya, onun için ne olması gerektiğini bilmeniz gerekir:

lines_per_part = int(total_lines   N - 1) / N

toplam satır wc -l ile elde edilebilir.

Bir örnek için: aşağıdaki kodu bakın

#!/usr/bin/bash

# Configuration stuff

fspec=qq.c
num_files=6

# Work out lines per file.

total_lines=$(wc -l <${fspec})
((lines_per_file = (total_lines   num_files - 1) / num_files))

# Split the actual file, maintaining lines.

split --lines=${lines_per_file} ${fspec} xyzzy.

# Debug information

echo "Total lines     = ${total_lines}"
echo "Lines  per file = ${lines_per_file}"    
wc -l xyzzy.*

Bu çıkışları:

Total lines     = 70
Lines  per file = 12
  12 xyzzy.aa
  12 xyzzy.ab
  12 xyzzy.ac
  12 xyzzy.ad
  12 xyzzy.ae
  10 xyzzy.af
  70 total

split daha yeni sürümleri -n/--number seçeneği CHUNKS bir dizi belirtmek için izin ver. Bu nedenle bir şey gibi kullanabilirsiniz:

split --number=l/6 ${fspec} xyzzy.

(ell-slash-six, lines, *19)* anlamdadır.

Bu ara-sıra no böler boyut açısından yaklaşık eşit dosyaları, verecektir.

Size kabaca aynı sayıda vermez çünkü bu son nokta sözçizgilerher biri, daha fazla aynı sayıda dosyakarakterler.

Eğer bir tane varsa 20 karakter satır ve 19 1-karakter beş satır (toplam yirmi satır) ve split, büyük olasılıkla dosyalarıolmazher dosya içinde dört satır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bratayley

    Bratayley

    30 Aralık 2010
  • George McCarron

    George McCar

    29 Mayıs 2013
  • Showtime

    Showtime

    21 HAZİRAN 2006