- Awk ve sed arasındaki fark nedir?
- Sed ve awk araçları için en iyi kullanım alanları nelerdir?
Yanıtlar:
sed
bir akış düzenleyicisidir. Satır başına karakter akışlarıyla çalışır. Goto tarzı döngüler ve basit koşullara (desen eşleşmesine ve adres eşleşmesine ek olarak) sahip ilkel bir programlama diline sahiptir. Esasen sadece iki "değişken" vardır: örüntü alanı ve tutma alanı. Komut dosyalarının okunabilirliği zor olabilir. Matematiksel işlemler en iyi ihtimalle olağanüstü derecede gariptir.
sed
Komut satırı seçenekleri ve dil özellikleri için farklı destek düzeylerine sahip çeşitli sürümleri vardır .
awk
satır başına sınırlandırılmış alanlara yöneliktir. Bu da dahil olmak üzere çok daha sağlam programlama yapıları vardır if
/ else
, while
, do
/ while
ve for
(C giriş ve dizi tekrar). Değişkenler ve tek boyutlu ilişkilendirilebilir diziler artı (IMO) kludgey çok boyutlu diziler için tam destek vardır. Matematiksel işlemler C'deki ile benzerdir printf
. "AWK" daki "K", " C Programlama Dili" ününün "Kernighan ve Ritchie" deki gibi " K ernighan " anlamına gelir ( A ho ve W einberger'i unutmamak için). Akla gelebilecek bir akademik intihal dedektörü yazılabilirdi awk
.
GNU awk
( gawk
), en son sürümdeki gerçek çok boyutlu diziler de dahil olmak üzere çok sayıda uzantıya sahiptir. Diğer varyasyonları vardır awk
dahil mawk
ve nawk
.
Her iki program da metin seçmek ve işlemek için normal ifadeler kullanır.
sed
Metinde kalıpların olduğu yerlerde kullanmaya eğilimliyim . Örneğin, "eksi işareti ve ardından bir rakam dizisi" (örn. "-231.45") biçimindeki bazı metindeki tüm negatif sayıları "muhasebecinin parantezleri" formuyla (örn. "(231.45)" değiştirebilirsiniz. ) bunu kullanarak (iyileştirilmesi gereken yerler vardır):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Ben kullanacağı awk
metin daha fazla satır ve sütun veya benzediği zaman, hem awk
"kayıtları" ve "alanları" onlara karşılık gelir. Yukarıdaki gibi benzer bir işlem yapacak olsaydım, ancak basit bir virgülle ayrılmış dosyada yalnızca üçüncü alanda şöyle bir şey yapabilirdim:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Tabii ki bunlar, her birinin sunduğu tüm yetenekleri göstermeyen çok basit örneklerdir.
1) awk ve sed arasındaki fark nedir?
Her ikisi de metni dönüştüren araçlardır. ANCAK awk sadece metin manipüle dışında daha fazla şey yapabilir. Diziler, döngüler gibi akış programlama vb. Gibi programlamada öğrendiğiniz şeylerin çoğu ile kendi başına bir programlama dili Ayrıca sed içinde "programlayabilirsiniz", ancak içinde yazılı kodu korumak istemeyeceksiniz .
2) Sed ve awk araçları için en iyi kullanım alanları nelerdir?
Sonuç: Çok basit metin ayrıştırma için sed kullanın. Bunun ötesinde her şey awk daha iyidir. Aslında, sed tamamen hendek ve sadece awk kullanabilirsiniz. İşlevleri çakıştığından ve awk daha fazlasını yapabildiğinden, awk kullanın. Öğrenme eğrinizi de azaltabilirsiniz.
sed
, yazım sözdiziminden 's/search/replace'
çok daha kolaydır awk
ve çoğu zaman ihtiyacınız olan şeydir.
Her iki aracın da metinle çalışması ve her iki aracın da kullanabileceği görevler vardır.
Benim için onları ayırma kuralı: sed
Aksi takdirde bir metin düzenleyicide yapacağınız görevleri otomatikleştirmek için . Bu yüzden akış editörü denir . (Vim'deki metni düzenlemek için aynı komutları kullanabilirsiniz). Kullanım awk
sen sayma alanları, hesapla toplamları, özü ve yeniden düzenlemek yapıları vb anlamına metni analiz etmek istiyorsanız
Ayrıca unutmamalısınız grep
. Kullanım grep
yalnızca bir metin (dosyası) / özü şey aramak istiyorsanız