文字列を配列に分割する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
それらを別々の引数として表示します。