Awk ile basit string işlemlerine örnek olması için örnek bir awk.sh adında bir shell script hazırladım . awk_data isimli dosyamız verilerimizi içersin ve içeriği aşağıdaki gibi olsun.
1 2 3 4 5 6 |
[root@omeroner ~]$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 tamamı 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ırnak içermesin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#!/bin/bash sed 's/\"//g' awk_data | 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 }' |
output;
1 2 3 4 5 6 7 8 |
[root@omeroner ~]$bash awk.sh [kelime1] [kelime2] [kelime3] [kelime4] Mazhar Fuat Ozkan - - Siyah Beyaz - Yol - Elektrik Su Porthos Dartanyan Aramis Athos Ali Feyyaz Metin - [root@omeroner~]$ |
So, what do you think ?