web-dev-qa-db-ja.com

awk内のsplit関数から配列の最後のインデックスにアクセスする方法は?

Awkを使用してこれを行うにはどうすればよいですか?

例-

awk '{split($1,A,"."); print A[-1], $1, $2, $3, $4}'

入力と出力のサンプル。

入力

123 456 abc.def.ghi 789 
321 654 qaz.wsx.edc.rfv 987

出力

ghi 123 456 abc.def.ghi 789  
rfv 321 654 qaz.wsx.edc.rfv 987
13
anshul gupta

問題が質問の例とまったく同じである場合は、@ muzidoから回答を取得してください。_$NF_が最後のフィールドになります。

split()によって配列の最後の要素を知りたいだけの場合:

split()関数は、「分割」された要素の数を返します。コードでテストします。awk '{print split($1,A,".")}' file数が表示されます。その後、次の方法で使用できます。

_awk '{n=split($1,A,"."); print A[n]}' file 
# n is the length of array A
_
25
Kent

GNU awkがある場合は、配列で関数lengthを試すことができます。

awk '{split($1,A,"."); print A[length(A)]}'
7
oliv

何故なの:

$ awk '{print A[split($3,A,".")],$0}' input.txt

それが役に立てば幸い!

1
Lacobus

ケントはすでにsplit()の答えを出しましたが、このために配列を作成/使用する分割は必要ありません。 with GNU gensub()のawk:

$ awk '{print gensub(/.*\./,"",1,$3), $0}' file
ghi 123 456 abc.def.ghi 789
rfv 321 654 qaz.wsx.edc.rfv 987
1
Ed Morton