我如何使用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