Satır numarasında bölünme dosyası nasıl [kapatılır]


94

400k satır uzunluğunda bir günlük dosyasını belirli bir satır numarasından bölmek istiyorum.

Bu soru için, bunu keyfi bir sayı 300k yapalım.

Bunu yapmama izin veren bir linux komutu var mı ( komut dosyası içinde )?

splitDosyayı boyuta veya satır numarasına göre eşit parçalara bölmeme izin verdiğini biliyorum , ancak istediğim bu değil. Bir dosyada ilk 300.000'i ve ikinci dosyadaki son 100.000'i istiyorum.

Herhangi bir yardım memnuniyetle karşılanacaktır. Teşekkürler!

İkinci düşünceye göre bu, süper kullanıcı veya sunucu hatası sitesi için daha uygun olacaktır.


17
Sanırım bu soru burada sorun değil. Bir kabuk betiği ile çözmeye çalıştığınız bir programlama göreviniz var; Yaygın olarak bulunan Unix araçlarını kullanan tek satırlık bir araçsa, çok daha iyi!
Jim Lewis

Ben de aynısını düşündüm. Ama yine de bir kabuk komut dosyası yazmıyordum :) oh peki, cevabımı yine de buldum. Teşekkürler
denormalizer

5
Bu soru çok iyi, şüphesiz, bu bir programlama sorusu ve çok da yerelleştirilmemiş
Peter

9
bu neden konu dışı bir soru? düşünce polisi her zamankinden daha çılgın.
Karel Bílek

7
Bu soru biraz konu dışı olabilir, ancak çok oylanmış ve arama motorlarında bu tür sorgularla "linux bölünmüş dosya satırında" ilk sonuçtur. Bu nedenle, diğer değerli yanıtların eklenebilmesi için bu soruyu yeniden açmanızı öneririm. Veya en azından SU ile ilgili en alakalı soruya bir bağlantı oluşturun.
Antoine Pinsard

Yanıtlar:


179
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

Ayrıca, ikinci düşünceye göre, bölünme sizin durumunuzda işe yarayacaktır, çünkü ilk bölünme ikinciden daha büyüktür. Bölme, girdinin dengesini son bölüme koyar, bu nedenle

split -l 300000 file_name

400k hatlı bir giriş için xaa300k hatlı ve xab100k hatlı çıktı verecektir .


Teşekkürler. superuser ie'de benzer şekilde cevaplanmış bir soru buldu. kuyruk vb. kullan Ve evet split benim örneğimle çalışacak, ancak örneğim her zaman 100K olmamıştı.
denormalizer

2
Bunu Windows'ta yapmaya çalışıyorsanız ve Cygwin'i kullanmak istemiyorsanız, bu proje gerekli tüm araçları yerel win32 ikili dosyaları olarak sağlar - unxutils.sourceforge.net
Jonathon Hill

15
İlk önce koşmaya gerek kalmadan tail -n +L file_name > bottom_filebasitçe kullanırdımL=K+1wc
Hashbrown

2
Kullanmayı tercih ederim sed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log. IHMO, bu daha basittir ve toplam satır sayısının hesaplanmasını gerektirmez. Ayrıca, her bir komutun yürütülmesi arasına satırlar eklense bile yine de çalışır.
Antoine Pinsard

Bazı dosyalar için bu yanıt bir satır dışında kalır, ancak Hashbrown tarafından önerilen düzenleme sorunu giderir.
scharette
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.