Katılmak istediğim iki csv/text dosyası var. Her ikisi de aynı ilk satırı içerir. Birleştirilmiş bir dosya üretmek için sed ve cat'i nasıl kullanacağımı, ancak ilk satırın yalnızca bir kopyasını bulmaya çalışıyorum. Ve sözdizimi ile bir zaman geçiriyorum. Herhangi bir yardım büyük takdir edilecektir: -D! sayesinde AndrewFile1 + (Dosya2 - ilk satır)> Dosya3
cevap
Bu data2.txt
gelen ilk satırı atlama, dosyada merged.txt
yılında dosyaları data1.txt
ve data2.txt
birleştirecek. Onunla Tamam eğer awk kullanır:
(cat data1.txt; awk 'NR>1' data2.txt) > merged.txt
awk merged.txt
dosyadan dosyaya data2.txt
gelen hat sayısı> 1 ile tüm satırları ekler.
NR
, işlenmekte olan dosyanın geçerli satır numarasını temsil eden yerleşik bir awk değişkenidir. Boolean ifadesi NR > 1
doğruysa, awk satırı örtülü olarak yazdırır. Eğer data1.txt
bozulmadan saklanması önemli olmadıysa
, sadece 2 dosya (eksi ilk satırı) ekleyin ve azaltabilecek sadece bu kadar:
awk 'NR>1' data2.txt >> data1.txt
Awk Başka bir seçenek:
awk 'NR==FNR || FNR>1' file1.txt file2.txt .. fileN.txt
Bu, ilk satırdaki tüm satırları yazdırır VEYA ilk satırın ardından sonraki dosyalarda herhangi bir satırı yazdırır. bir satır '1 d' ile çözüldü
Eğer bunu yapsaydım ne olurdu: 'awk' NR == FNR || FNR> 1 '* .txt' –
Dosya globbing ile eşleştirilen dosyaların sırasına güvenirsiniz. Hepsi aynı ilk satırları içeriyorsa, bu güvenli olmalıdır. Neden denemiyorsun ve ne olduğunu görmüyor musun? – ghoti
Aşağıdaki komut ben en basit çözüm olduğunu söyleyebilirim
sed '1 d' file2 >> file1
Bu komutla hem 'file1' hem de' file2' değiştiriliyorsunuz - bu OP ile tamamlanabilir veya olmayabilir. Her iki seçeneği de sunmakta daha iyidir (diğeri orijinal dosyalardan birini değiştirmez). – Levon
@Levon: Hayır, burada 'file2' değiştirmiyorsunuz. – tripleee
@tripleee Sadece test ettim, * silme * değil, daha doğrusu * ilk satırı .. * göstermiyor. Muhtemelen cevapta daha iyi ifade edilmiş olabilir. – Levon
File1 sonucu ekler file2
ilk satırı silmek için şu anlama gelir:
(cat file1.txt ; tail -n +2 file2.txt) > file3.txt
açıkça yaptığınızı sadece ne belirten avantajına sahiptir: o se ilk satırında ancak tüm baskı, tüm ilk dosyayı yazdırmak Cond dosyası, çıktıyı üçüncü dosyaya yazıyor.
Vay! Herkese teşekkürler!!!!!!! :-D –
- 1. Neden "file1> file1" işini yapmıyor?
- 2. os.path.abspath ('file1.txt')
- 3. Dosya2'de var olan dosya satırı 1'i kaldırın.
- 4. ilk
- 5. xcopy ile çok sayıda dosyayı kaydetme
- 6. İlk girdinin ilk girişi json
- 7. Kod İlk ve Veri Tabanı İlk
- 8. Linux'taki iki dosyanın üst üste gelmesi veya dosya1'den gelen satırların dosya1 ile değiştirilmesi 2
- 9. , ilk başlatma
- 10. ilk program
- 11. ilk kez
- 12. İlk kayıt
- 13. İlk kademe
- 14. Bazı dosyaları silmek için bulma özelliğini kullanma
- 15. Bir yerlerde iyi bir Emacs proje yönetimi var mı?
- 16. FTP .NET
- 17. Varlık Çerçeve Kodu İlk ve Veritabanı İlk Hata/Çakışma
- 18. İlk harfler büyük Sadece f.label İlk Kelime harfe çevirir
- 19. İlk karakteri seçmenin bir yolu var mı? : İlk harfli
- 20. JavaFX düğmesi ikinci tıklamada ilk tıklama değil İlk
- 21. DataBase'den nasıl önlenir? Öznitelikler DataBase İlk Modelinde silindi İlk Model
- 22. Modelleme polimorfik çağrışımlar veritabanı-ilk karşı kod ilk
- 23. Genişlik-ilk ile derinlik-ilk arama arasındaki girdi/çıktı
- 24. Joda-zamanı: Bu yılın ilk ISO haftasında ilk gün 1
- 25. Haftanın ilk günü, Locale'ye dayanan haftanın ilk gününü alma Moment
- 26. yalnızca ilk kez
- 27. Kod ilk doğrulamayı geçmiyor
- 28. İlk Yükte Doğrulama Bağlaması
- 29. İlk öğeyi AutoMapper
- 30. Yalnızca ilk eşlemeyi preg_replace
Alternatif olarak, 'awk 'NR> 1'' yerine' tail -n + 2' kullanabilirsiniz. –
@ TannerL.Swett Neat .. Bir şekilde "kafa" ya da "kuyruk" kullanmayı düşünüyordum, ama bunu 'awk' ile nasıl yapacağım konusunda emin oldum. Tabii OP, 'data1.txt' komutunu tutmayı umursamadıysa, çözüm ilk komutu atlayabilir ve sadece 2. dosyayı (ilk satırı) bu dosyaya ekleyebilir. – Levon