Yeni bir Linux kullanıcısıyım ve hala nasıl kullanılacağını anlayamadım, sorunu çok çirkin bir şekilde çözdüm ama ben emin olun, bazı akıllıca sed
veya awk
. Sorun açıklamak biraz zor, ancak belirli kurallarla biçimlendirilmiş iki metin dosyasının üst üste gelmesiyle ilgilidir.Linux'taki iki dosyanın üst üste gelmesi veya dosya1'den gelen satırların dosya1 ile değiştirilmesi 2
Sorun 1:
Kuralları: dosya1 "custom
" oluşur bazı bu satırları SIRASIYLA file2
mevcut hatlarla değiştirilmesi gerekir dize "custom
" eşit çizgiler, bu nedenle ilk kez sahiptir file1
, file2
ilk satırı yerine dosya2'nin içinde "custom
" vardı hattının konacaktır, bu ihtiyacı file1 ikinci kez "custom
" oluşur file2 vb "custom
" hatların ortaya çıkma da sayıda ikinci hattı ile değiştirilmesi file1
içinde file2
'daki satır sayısına eşittir.
Örnek:
File1:
line1
line2
custom
line4
custom
line6
File2:
line3
line5
çıkış Bu i çözme
line1
line2
line3
line4
line5
line6
bir yolu, Belki de custom
'un ilk oluşumunu aramak için, file2
numaralı satırın ilk satırı ile değiştirin, ilk satırı file2
'dan silin, sonraki bir sonraki özel durum araması yapın, ilk satırı file2
olarak alın ve silin. Sed/grep/awk ile daha iyi bir şekilde var olduğundan eminim.
Sorun 2: Bunlar
: kodun
Kullanıcı aslında ona gibi belki sorun böyle formüle edilmiştir eğer çözmek daha kolay olacaktır, dosya2 belirtmek gerekiyor kurallar: her iki dosya1 ve dosya2 şimdi eşit sayıda satır var. Dosya1'deki bazı satırlar, önceki sorundaki gibi "özel" dizgeye eşit. Dosya2, dosya1'deki satırların "özel" değerine eşit olmadığı yerlerde boş satırlara sahiptir, bu yüzden dosya2'yi dosya1 üzerine yapıştırmak ve yalnızca "özel" ile satırların üzerine yazmak istiyorum.
dosya 1 şuna benzer:
line1
custom
line3
custom
line5
dosya 2'dir:
/n
line2
/n
line4
/n
/n boş satır için standları, çıkış
line1
line2
line3
line4
line5
Ayrıca ben çıkışını istiyorum olduğunu çözümünün üzerine yazılacak dosya1 (Ben bunu solution >> file1
yapabilirim)
Hem kullandığınız komutların ne yaptığı, hem sorun hem de açıklama için çözümler istiyorum.
Kod 1'in geçerli sürümü için dosya1'de yalnızca 1-3 satır var, bu yüzden çok fazla if-else senaryosuyla dosya2'de satırları ve kuyrukları çizerek sorunu çözdüm, ama daha zarif bir şey olduğuna eminim mümkün.
BONUS soru:
Öncelikle ayrı değişkenler ($line1
, $line2
vs) olarak Dosya1 satırların içeriğini depolanır ve neredeyse awk
ile sorun çözüldü, ama bunun nedeni bir $var
kabul etmek istemedi ''
fiyat teklifleri ve ayrıca ""
teklifleriyle çalışmadı. Sed'ün güçlü şeyler yapabildiğini gördüm, ancak string değişkeninde kaydedilen model ile çalıştırılabilir mi? sed
'u ""
ve $var
ile aramayı denedim, ancak her zaman işe yarayacak mı? Aynı şeyi awk ile denedim ve kırdı. Kurtarmaya!
Eğer ** – Vasfed
denenmiş ve neredeyse Awk ** ile sorunu çözdük göstermek edin: İkinci örnek, iki 'line3' hatları olması gerekmiyor söz – anubhava
da çözüm gösterebilir misin? – 123