AWK String İşlemleri
awk içerisinde basit string işlemlerine örnek olması için betik hazırladım. data_file isimli dosyamız verilerimizi içersin ve içeriği aşağıdaki gibi olsun.
cat data_file kelime1="Mazhar" kelime2="Fuat" kelime3="Ozkan" kelime2="Siyah" kelime3="Beyaz" kelime1="Yol" kelime4="Su" kelime3="Elektrik" kelime4="Athos" kelime1="Porthos" kelime3="Aramis" kelime2="Dartanyan" kelime3="Metin" kelime1="Ali" kelime2="Feyyaz" |
Görüldüğü gibi
- kelime1, kelime2, kelime3 ve kelime4 olarak isimlendirilmiş parametreler ve değerleri mevcut.
- Veriler sıralı değil ve herhangi bir satırda paramatrelerin tamami bulunmayabiliyor.
İstenen;
- Her parametreye ait veriler aynı sutunda olacak şekilde bir tablo görünümünde olsun
- Herhangi bir satırda belirli bir parametre yok ise, sutunda “-” olarak görünsün
- Bu işlem büyük-küçük harf duyarsız yapılsın
- Çıktı çift tıknak içermesin
sed 's/\"//g' data_file | awk ' BEGIN { FORMAT="%-15s%-15s%-15s%s\n" printf FORMAT,"[kelime1]","[kelime2]","[kelime3]","[kelime4]" } { if (match(tolower($0),"kelime1=[A-Za-z]*") > 0){ kelime1=(substr($0,RSTART+8,RLENGTH-8)) }else { kelime1="-" } if (match(tolower($0),"kelime2=[A-Za-z]*") > 0){ kelime2=(substr($0,RSTART+8,RLENGTH-8)) }else { kelime2="-" } if (match(tolower($0),"kelime3=[A-Za-z]*") > 0){ kelime3=(substr($0,RSTART+8,RLENGTH-8)) }else { kelime3="-" } if (match(tolower($0),"kelime4=[A-Za-z]*") > 0){ kelime4=(substr($0,RSTART+8,RLENGTH-8)) }else { kelime4="-" } printf FORMAT,kelime1,kelime2,kelime3,kelime4 }' |
Çıktı;
[kelime1] [kelime2] [kelime3] [kelime4] Mazhar Fuat Ozkan - - Siyah Beyaz - Yol - Elektrik Su Porthos Dartanyan Aramis Athos Ali Feyyaz Metin - |
linux locate komutu Ubuntu numpad tuşları