Sadece 10 ilk ve 10 son girişini korumak için boru hattının bir parçası olarak sed kullanmak istiyorum. Fiziksel dosyalar üzerinde çalışmıyor, sadece STDIN'den okuyor ve STDOUT'a çıktı. Akıştaki veri miktarı makine RAM'inden (veya disk alanından) daha büyüktür, bu nedenle nispeten verimli olması gerekir. Ayrıca geçici dosyalar (yazılabilir dosya sistemleri yok) oluşturmadan akış modunda çalışmalıdır.Dosyanın sadece ortasından kaldırılıyor
Ekstra Bonus yerine silinmiş ortasında tüm bir satır görüntüler eğer: Ben 100000 1'den numaralarını içeren giriş hatlarını olsaydı
örneğin, ben edebi ile çıkışa (hat için gerekir <cut>
metin) olmak güzel, ama isteğe bağlıdır olacaktır:
yes ' ' | head -n 100000 |nl | \
sed -e '$q;11,$d'`
:
1
2
3
4
5
6
7
8
9
10
<cut>
99991
99992
99993
99994
99995
99996
99997
99998
99999
100000
I ile geldim iyi ile o çıktı ilk 10 çizgiler ve sonuncusu 1 hattı olması
1
2
3
4
5
6
7
8
9
10
100000
verir
ama çıktı daha bağlamda çok veri sonunda (yerine 1 10 hatları) gerek.
Güncelleştirme: Giriş akışının uzunluğu bilinmiyor ve değişecektir, yukarıdaki 100000
sadece bir örnektir.
Güncelleme: Söz ve etiketinde belirtildiği gibi, ben içinde lüzum yok tmp dosyaları ile birlikte awk, daha kolay olduğu perl veya diğer programlama dilleri (bu şartı yerine getirmek için değil, sed Aslında mevcut kısıtlı komutları ve kaynakları)
Güncelleme ile sisteme gömülü olduğu nedeniyle şöyledir: girdi o 10 + 10 satır altında olması durumunda, bu ideal sadece sed bütün giriş
Teşekkürler! Eğer bir seçim yapsaydım eğer okunabilir perlde yapardım (gerçekten var olabilir), ama ben sed ile sıkışıp kaldım. Bu neredeyse mükemmel görünüyor, ancak giriş sadece 15 satır olduğunda anormal. Burada sed için uzandığımı biliyorum, ancak kopyaları çoğaltmak yerine tüm girdiyi yazdırmak mümkün mü? –
@MatijaNalis: Cevabımı güncelledim. – Birei