我怎么能用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
答案 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