文字列を配列に分割するawkには、次の関数を使用しますsplit()。
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
セパレーターが指定されていない場合はFS、デフォルトのスペースであるを使用します。
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
セパレータを与えることができます、例えば::
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
これは、FS次のように設定するのと同じです。
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
gawkでは、セパレータを正規表現として提供することもできます。
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
さらに、4番目のパラメーターを使用して、各ステップの区切り文字を確認します。
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
GNU awkのmanページを引用してみましょう:
split(string、array [、fieldsep [、seps]])
除算ストリング片には、により分離fieldsepとで片記憶アレイにセパレータ文字列をSEPSアレイ。最初のピースはに格納されarray[1]、2番目のピースはに格納されarray[2]ます。三番目の引数の文字列値fieldsepは、スプリットに説明する正規表現である文字列(同じくらいFSが入力レコードを分割する記述する正規表現することができます)。場合fieldsepが省略されている、の値FSが使用されます。split()作成された要素の数を返します。sepsはgawk拡張でありseps[i]、区切り文字列はarray[i]とarray[i+1]。場合 fieldsepは単一のスペースです。その後、先頭の空白が入りseps[0]、末尾の空白がに入りますseps[n]。ここで、nは戻り値split()(つまり、配列内の要素の数)です。
OFSは、それらの間にコンマを挿入して、printそれらを別々の引数として表示します。