Linux metin işleme araçları — awk, sed ve diğerleri

Bu flood’da Unix benzeri sistemlerde metin işlemede yoğun olarak kullanılan awk, sed ve diğer bazı programları tanıtacağım.

Unix benzeri (Linux, macOS) işletim sistemlerinin power user olarak nitelenen kullanıcılar tarafından sıklıkla tercih edilme sebeplerinden birisi de şüphesiz metin işleme dahil birçok işlemin komut satırından hızlıca ve kolaylıkla yapılabilmesidir.

Bahsedeceğimiz ilk araç bir program olmaktan çok başlı başına bir programlama dili olan awk'dır. Adını tasarımcılarının Alfred Aho, Peter Weinberger and Brian Kernighan baş harflerinden almıştır. Benim günlük olarak en fazla kullanıdığım metin işleme aracı da awk'dır.

Şimdi örneklerle awk'nın yeteneklerini anlamaya çalışalım. Aşağıdaki ekran çıktısında awk; (noktalı virgül) ile ayrılmış bir csv dosyasının ikinci kolonundaki verileri listelemek için kullanılmıştır.

Aşağıdaki örnekte ilk komutta awk bu kez dosya üzerinde çalışmaktansa kendisine pipe, | ile yönlendirilen akıştan girdiyi almış ve metni işleyerek geri döndürmüştür. İkinci komutta ise csv dosyasının sadece ikinci ve üçüncü kolonlarını alıp , virgül ile ayırmıştır.

awk'nın basit bir programdan ziyade bir programlama dili olduğunu söylemiştik. Aşağıdaki ekran çıktısında csv dosyasında üçüncü kolonda bulunan dosyalar toplanmıştır. awk'nın metin işleme gücü bu basit örnek üzerinden çok iyi görülebilmektedir.

awk ile bir metin dosyasının bazı satırları satır numaralarına göre veya içeriklerine göre filtrelenebilir. Aşağıdaki örnekte bu özellikler örneklenmiştir.

awk'nın yetenekleri ile ilgili umarım yukarıdaki örnekler yeterli ipucunu verebilmiştir. Şimdi sed (stream editor)'in yeteneklerini göstermek üzere birkaç örneğe yer verelim. Örneklerden de görülebileceği gibi awk ve sed zaman zaman birbirlerinin yerine kullanılabilir.

sed'in en yoğun kullanımı bir kalıba (pattern) uyan metinleri değiştirmektir. Aşağıdaki örnekte csv dosyasında bulunan ; (noktalı virgül) karakterleri , (virgül) karakteri ile değiştirilmiştir.

sed ile yapılmak istenen değişikliğin standard output'a basılmasındansa dosyanın üzerine yazılması istenirse -i opsiyonu kullanılabilir. -i in place editing anlamına gelir.

s - substitute opsiyonu ile değiştirilen satırlar d - delete opsiyonu ile silinebilir. Aşağıdaki ekran çıktısında bu örneklenmiştir.

awk ile olduğu gibi sed ile de satır numaralarına göre satırlar filtrelenebilir. Aşağıdaki ekran çıktısında ilk olarak birinci satır silinmiş sonra da sadece ikinci satır ile üçüncü satırdaki veriler seçilmiştir.

Her ne kadar birçoğunun fonksiyonu awk ve sed ile yerine getirilebiliyor olsa da metin işlemek için tr, cut, paste gibi faydalı programlar da bulunmaktadır.

tr - translate adından da anlaşılabileceği gibi karakter dönüşümü yapar. Aşağıdaki örnekte önce küçük harfler büyük harflere çevrilmiş sonra da ; karakteri , ile değiştirilmiştir.

cut, awk'ya benzer şekilde kolonlar şeklinde verilen dosyalardaki bazı kolonları almaya yarar. Aşağıdaki örnekte sadece birinci ve üçüncü kolonlar alınmıştır.

Son olarak paste, farklı dosyalarda bulunan satırları birleştirmek (merge) için kullanılır. Aşağıdaki örnekte data.csv dosyasına satır numaraları eklenmiştir.