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
問題が質問の例とまったく同じである場合は、@ 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
_
GNU awk
がある場合は、配列で関数length
を試すことができます。
awk '{split($1,A,"."); print A[length(A)]}'
何故なの:
$ awk '{print A[split($3,A,".")],$0}' input.txt
それが役に立てば幸い!
ケントはすでに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