我如何使用awk來做到這一點?如何從awk中的split函數訪問數組的最後一個索引?
實施例 -
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
我如何使用awk來做到這一點?如何從awk中的split函數訪問數組的最後一個索引?
實施例 -
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,得到答案會給你最後一場。
如果你只是想知道通過split()
數組的最後一個元素:
split()
函數將返回你多少元素它只是「分裂」,測試你的代碼:awk '{print split($1,A,".")}' file
你將看到的數字。
awk '{n=split($1,A,"."); print A[n]}' file
# n is the length of array A
完美,謝謝! –
@anshulgupta @anshulgupta你甚至可以:'print A [split($ 1,A,「。」)]';-) – Kent
讓我知道你是否可以在我最終確定我的代碼之前對其進行優化;) –
爲什麼不......然後,你可以只是使用它
$ awk '{print A[split($3,A,".")],$0}' input.txt
希望它能幫助!
肯特已經給了你split()的答案,但是你不需要爲此創建/使用一個數組。用GNU awk for gensub():
$ awk '{print gensub(/.*\./,"",1,$3), $0}' file
ghi 123 456 abc.def.ghi 789
rfv 321 654 qaz.wsx.edc.rfv 987
你能澄清一下,如果你想分割第一場還是第三場? – Sundeep