Bir dizeyi içindeki bir diziye bölmek awkiçin şu işlevi kullanırız split():
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
Herhangi bir ayırıcı verilmezse, FSvarsayılan olarak boşluk kullanılır:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
Bir ayırıcı verebiliriz, örneğin ::
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
Aşağıdakileri ayarlamak için eşdeğerdir FS:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
Gawk'de ayırıcıyı normal ifade olarak da sağlayabilirsiniz:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
Ve hatta dördüncü parametresini kullanarak sınırlayıcının her adımda ne olduğunu görün:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
GNU awk'nin man sayfasını alıntılayalım :
split (dize, dizi [, fieldsep [, seps]])
Bölme dizisi parçalara ayrılmış fieldsep ve parçaları saklamak dizi ve ayırıcı dizeleri SEPS dizisi. İlk parça depolanır array[1], ikinci parça array[2]içeri girer vb. Üçüncü argümanın dize değeri olan fieldsep , dizenin nereye bölüneceğini açıklayan bir normal ifade ( FS'nin giriş kayıtlarının nereye bölüneceğini açıklayan bir normal ifade olabilir). Eğer fieldsep atlanırsa, değeri FS kullanılır. split()oluşturulan eleman sayısını döndürür. seps , aradaki ayırıcı dize gawkolan bir uzantıdırseps[i]array[i]ve array[i+1]. Eğer fieldseptek bir boşluktur, o zaman önde gelen boşluklar girer seps[0]ve sonradan boşluklar girer seps[n], burada n dönüş değeri split()(yani dizideki eleman sayısı).
OFS, aralarına virgül koyarakprintbirbirinden bağımsız argümanlar olarak görünmesini sağlayın.