Bir metin dosyasındaki her satırı, eşit olmayan uzunluktaki satırlara sahip belirli sayıda boşluk ile nasıl doldurabilirim?


1

Ben sıralamaya çalışıyorum bu metin dosyası var, aşağıdaki gibi karakterleri var:

abcd  a27382  ESH738 991839
ahsj  dhaksj  GSH736 774828
ahsj  dhaksj  RHA330
ahsj  dhaksj  GSH736 774828

Sorum şu, son sayının sonuna geldiğimde, satırın son satırından sonra sağ taraftaki tüm sayıların sonuna nasıl boşluk bırakıp, not defteri olmadan nasıl boşluk bırakabilirim?

Bunu 40.000'den fazla satır için yapmam gerekiyor, bu yüzden bu 3 fazladan boşluğu almak için her satırın sonunda boşluk tuşuna manuel olarak basmak söz konusu değil. Ayrıca, numara bulunmayan yerlerde (örnek, satır 3) Hala eksik sayıları telafi etmek için bu boşluklara ihtiyacım var, bu durumda, 9 boşluk (var olmayan sayılar için 6 ve sonuncusu için 3 olacak) sonra boşluklar). Bunu yapmanın kolay bir yolunu biliyorsanız lütfen bana bildirin, çok yardımcı olacak, teşekkürler!


Windows'a özel bir çözüm mü arıyorsunuz? Excel'e erişiminiz var mı? Herhangi bir komut dosyası dili veya yüklü Notepad ++ var mı?
Jason Aller

@Jason Aller - Evet, Notepad ++ 'a sahibim ve evet, Windows’a özel bir çözüm.
Claudio

Yanıtlar:


1

Notepad ++ kullanarak tüm satırları boşluklarla doldurmak ve sonra tüm satırları aynı uzunlukta kırpmak için iki regex tabanlı değiştirme yapmak mümkündür. Bu tekniğin performansını 40.000 satırlık bir dosyaya karşı test etmedim.

İlk değiştirme metnin sağına boşluk ekleyecek:

enter image description here

Değiştirme sekmesinde "Normal ifade" ayarını yapın ve "yeni satırla eşleşiyor" ve "Etrafına sar" seçeneğinin kapalı olduğundan emin olun. tip ^(.*) bu, satırdaki her şeyi "Neyi bul" ile eşleştireceğiniz anlamına gelir $1 ardından eklemek istediğiniz boşluk sayısı (örneğin, ekle 9).

Değiştirdikten sonra tüm satırları değiştirmek en az istenen uzunluğa sahip olmalı ve çoğu istediğinizden daha uzun olacaktır.

Kırpılan ikinci yerine. enter image description here

İkinci değişiklik için çizgiye iki parça alacağız ve birini fırlatacağız.

İlk önce "Şununla değiştir" seçeneğinin yalnızca $1 İçinde ve sonra boşluk yok. Ardından "Neyi bul" olarak değiştirin ^(.{28})(.*) ilk satırda satırın başından itibaren ilk 28 (dolgu olarak 3 boşluk bırakacak şekilde 31 olarak değiştirilir) karakterlerini bulur ve ardından satırdaki diğer her şeyi ikinci gruba bulur.

Bu "Replace" ile uygulandığında, tüm çizgileri aynı uzunlukta kesmelidir.

Not: Bazı regex motorları gerekebilir $ Bu tekniği kullanırken ekli "satırın sonu" anlamına gelir.


Sağol Jason! Bu arada SQL'de sıraladım (içe aktarıp SQL kodunu kullanarak boşluk ekledi), ancak çözümünüz de işe yarıyor.
Claudio

0

Orijinal dosyayı yazıp yazmamaya bağlı olarak değişir. Bu dosyayı oluşturuyorsanız kullanabilirsiniz printf bunun gibi

 printf "%s   " "your_string_of_text"

printf kaldırabileceğiniz birçok biçimlendirme seçeneğine sahiptir. Ancak dosyayı düzenliyorsanız, sed sana iyi hizmet edeceğim

 sed 's/^.*$/&\ \ \ /g' some_file > some_other_file

Bu, her satırın sonuna 3 boşluk katacak some_file ve çıktıyı yaz some_other_file. Boşlukların kaçtığını ve işaret işaretinin ilk kalıbı çıktıya yazma amacına hizmet ettiğini unutmayın.


Dosyayı düzenlemeliyim, verdiğiniz kodu gerçekten nerede yazmalıyım?
Claudio

İle dosyayı düzenleyebilirsiniz. sed komut satırından ... sisteminizin kullanım kılavuzuna bakın. OSX’de sed -i 'sed_command' filename Dosyayı yerinde düzenlemek için veya yukarıdaki komutu ikincil bir dosyaya aktarmak için kullanın. Windows kutunuzda yoksa sed, CygWin'i yüklemeyi deneyebilirsiniz.
SaxDaddy
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.