Bir dizeyi içindeki bir diziye bölmek awk
iç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, FS
varsayı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 gawk
olan 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 koyarakprint
birbirinden bağımsız argümanlar olarak görünmesini sağlayın.