如何从awk中的split函数访问数组的最后一个索引?

时间:2016-09-26 12:40:50

标签: arrays shell indexing 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

4 个答案:

答案 0 :(得分:16)

如果您的问题与问题中的示例完全相同,请从@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

答案 1 :(得分:4)

如果你有GNU aaa Any--END--Pattern ANY--BEGIN--PATTERN # print 1 ddd # print 2 Any--END--Pattern # print 3 ANY--BEGIN--PATTERN # print 4 ggg # print 5 Any--END--Pattern # print 6 hhh # print 7 Any--END--Pattern # print 8 ,你可以在数组上尝试awk函数:

length

答案 2 :(得分:1)

为什么不:

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

希望它有所帮助!

答案 3 :(得分:1)

肯特已经给了你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