Büyük bir dosyam var ve iki dosyaya bölmem gerekiyor. İlk dosyada 1000 satırın seçilmesi ve başka bir dosyaya konulması ve ilk dosyadaki bu satırların silinmesi gerektiğini varsayalım.
Kullanmayı denedim splitama çoklu parçalar oluşturuyor.
Büyük bir dosyam var ve iki dosyaya bölmem gerekiyor. İlk dosyada 1000 satırın seçilmesi ve başka bir dosyaya konulması ve ilk dosyadaki bu satırların silinmesi gerektiğini varsayalım.
Kullanmayı denedim splitama çoklu parçalar oluşturuyor.
Yanıtlar:
En kolay yolu kullanımına muhtemelen headve tail:
$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2
Bu, ilk 1000 satırı input-fileiçine output1ve 1001'den sonuna kadar tüm satırlarıoutput2
Bence bu spliten iyi yaklaşım.
-l xxxxSeçeneği kullanmayı deneyin , burada xxxx her dosyada istediğiniz satır sayısıdır (varsayılan 1000'dir).
-n yyOluşturulan dosya miktarı konusunda daha fazla endişe duyuyorsanız bu seçeneği kullanabilirsiniz . Kullanım -n 2, her dosyadaki satır sayısı ne olursa olsun, dosyanızı yalnızca 2 parçaya böler.
İle dosyanızdaki satır sayısını sayabilirsiniz wc -l filename. Bu, çizgiler seçeneğiyle birlikte 'wordcount' komutudur.
man splitman wcsplit -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??.
Bu bir iş csplit:
csplit -s infile 1001
olacak silently bölme infile, ilk parça xx00- kadar ancak hattı 1001 ve ikinci parça hariç xx01- Geriye kalan hatları. Bir önek
kullanma -fve belirleme gibi farklı çıktı dosyası adlarına ihtiyacınız varsa seçeneklerle oynayabilirsiniz :
csplit -sf piece. infile 1001
adlı iki dosya üretir piece.00vepiece.01
Bir akıllı ile de şöyle bir headşey yapabilirsiniz:
{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile
csplit. Çok hoş. (Sadece POSIX komutlarının listesini okuyorum ve başta başımın csplitkomutun amacı etrafına sarılmasında büyük bir sorun yaşadım . Gerçekten çok basit.) :)
Sorunun istediğini tek bir komutla yapmanın basit bir yolu:
awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile
veya uzun, sezgisel olarak anlaşılır komutlar yazmaktan gerçekten nefret edenler için,
awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
split --helpmi