Awk-string-functions

提供:Dev Guides
移動先:案内検索

AWK-文字列関数

AWKには、次の組み込みの文字列関数があります-

asort(arr [、d [、how]])

この関数は、値を比較するためのGAWKの通常のルールを使用して arr の内容をソートし、ソートされた値 arr のインデックスを1から始まる連続した整数に置き換えます。

[jerry]$ awk 'BEGIN {
   arr[0] = "Three"
   arr[1] = "One"
   arr[2] = "Two"
   print "Array elements before sorting:"

   for (i in arr) {
      print arr[i]
   }
   asort(arr)
   print "Array elements after sorting:"

   for (i in arr) {
      print arr[i]
   }
}'

このコードを実行すると、次の結果が得られます-

出力

Array elements before sorting:
Three
One
Two
Array elements after sorting:
One
Three
Two

asorti(arr [、d [、how]])

この関数の動作は、配列インデックスがソートに使用されることを除いて、* asort()*と同じです。

[jerry]$ awk 'BEGIN {
   arr["Two"] = 1
   arr["One"] = 2
   arr["Three"] = 3
   asorti(arr)
   print "Array indices after sorting:"

   for (i in arr) {
      print arr[i]
   }
}'

このコードを実行すると、次の結果が得られます-

出力

Array indices after sorting:
One
Three
Two

gsub(regex、sub、string)

*gsub* はグローバル置換を表します。 出現するすべての正規表現を指定された文字列(サブ)に置き換えます。 3番目のパラメーターはオプションです。 省略すると、$ 0が使用されます。

[jerry]$ awk 'BEGIN {
   str = "Hello, World"
   print "String before replacement = " str

   gsub("World", "Jerry", str)
   print "String after replacement = " str
}'

このコードを実行すると、次の結果が得られます-

出力

String before replacement = Hello, World
String after replacement = Hello, Jerry

index(str、sub)

*sub* が *str* の部分文字列かどうかをチェックします。 成功すると、subが始まる位置を返します。それ以外の場合は、0を返します。 *str* の最初の文字は位置1です。

[jerry]$ awk 'BEGIN {
   str = "One Two Three"
   subs = "Two"
   ret = index(str, subs)

   printf "Substring \"%s\" found at %d location.\n", subs, ret
}'

このコードを実行すると、次の結果が得られます-

出力

Substring "Two" found at 5 location.

長さ(str)

文字列の長さを返します。

[jerry]$ awk 'BEGIN {
   str = "Hello, World !!!"
   print "Length = ", length(str)
}'

このコードを実行すると、次の結果が得られます-

Length = 16

match(str、regex)

文字列 strregex の最初の最長一致のインデックスを返します。 一致が見つからない場合は0を返します。

[jerry]$ awk 'BEGIN {
   str = "One Two Three"
   subs = "Two"
   ret = match(str, subs)

   printf "Substring \"%s\" found at %d location.\n", subs, ret
}'

このコードを実行すると、次の結果が得られます-

出力

Substring "Two" found at 5 location

split(str、arr、regex)

この関数は、文字列 str を正規表現 regex によってフィールドに分割し、フィールドは配列 arr にロードされます。 regex を省略すると、FSが使用されます。

[jerry]$ awk 'BEGIN {
   str = "One,Two,Three,Four"
   split(str, arr, ",")
   print "Array contains following values"

   for (i in arr) {
      print arr[i]
   }
}'

このコードを実行すると、次の結果が得られます-

出力

Array contains following values
One
Two
Three
Four

printf(format、expr-list)

この関数は、形式に従って expr-list から構築された文字列を返します。

[jerry]$ awk 'BEGIN {
   param = 1024.0
   result = sqrt(param)

   printf "sqrt(%f) = %f\n", param, result
}'

このコードを実行すると、次の結果が得られます-

出力

sqrt(1024.000000) = 32.000000

strtonum(str)

この関数は str を調べ、その数値を返します。 strの先頭が0の場合、8進数として扱われます。 strが先頭の0xまたは0Xで始まる場合、16進数として解釈されます。 それ以外の場合、10進数であると想定します。

[jerry]$ awk 'BEGIN {
   print "Decimal num = " strtonum("123")
   print "Octal num = " strtonum("0123")
   print "Hexadecimal num = " strtonum("0x123")
}'

このコードを実行すると、次の結果が得られます-

出力

Decimal num = 123
Octal num = 83
Hexadecimal num = 291

sub(regex、sub、string)

この関数は、単一の置換を実行します。 最初に出現する正規表現パターンを指定された文字列(サブ)で置き換えます。 3番目のパラメーターはオプションです。 省略すると、$ 0が使用されます。

[jerry]$ awk 'BEGIN {
   str = "Hello, World"
   print "String before replacement = " str

   sub("World", "Jerry", str)
   print "String after replacement = " str
}'

このコードを実行すると、次の結果が得られます-

出力

String before replacement = Hello, World
String after replacement = Hello, Jerry

substr(str、start、l)

この関数は、長さ l のインデックス start で始まる文字列 str の部分文字列を返します。 lengthを省略すると、インデックス start で始まる str のサフィックスが返されます。

[jerry]$ awk 'BEGIN {
   str = "Hello, World !!!"
   subs = substr(str, 1, 5)

   print "Substring = " subs
}'

このコードを実行すると、次の結果が得られます-

出力

Substring = Hello

tolower(str)

この関数は、すべての大文字を小文字に変換した文字列 str のコピーを返します。

[jerry]$ awk 'BEGIN {
   str = "HELLO, WORLD !!!"
   print "Lowercase string = " tolower(str)
}'

このコードを実行すると、次の結果が得られます-

出力

Lowercase string = hello, world !!!

toupper(str)

この関数は、すべての小文字を大文字に変換した文字列 str のコピーを返します。

[jerry]$ awk 'BEGIN {
   str = "hello, world !!!"
   print "Uppercase string = " toupper(str)
}'

このコードを実行すると、次の結果が得られます-

出力

Uppercase string = HELLO, WORLD !!!