使用awk等bash命令按最后一个点分割字符串并新增列存储末尾部分
解决方案
方法1:split拆分后拼接前缀(兼容性更好,适用于所有awk版本)
直接使用如下命令即可适配任意数量点号的场景:
awk '{ # 按点拆分第一列,n为拆分后的元素总数 n = split($1, arr, ".") # 取最后一个元素作为后缀 suffix = arr[n] # 拼接除最后一个元素外的所有内容作为前缀 prefix = arr[1] for (i = 2; i < n; i++) { prefix = prefix "." arr[i] } # 按要求用制表符分隔输出 print prefix "\t" suffix "\t" $2 }' file.txt
方法2:正则匹配提取(写法更简洁,适用于gawk等支持gensub的版本)
通过正则直接匹配最后一个点的前后内容,无需循环:
awk '{ prefix = gensub(/(.*)\.[^.]*$/, "\\1", 1, $1) suffix = gensub(/.*\.([^.]*)$/, "\\1", 1, $1) print prefix "\t" suffix "\t" $2 }' file.txt
内容的提问来源于stack exchange,提问作者pingu87
相关产品推荐
相关产品推荐

