根据字段中的模式拆分列

根据字段中的模式拆分列

示例:我想分割$2输入文件,放置一个tab后模式surname

输入:

name    surname1    
name    surname30000
name    surname456

期望的输出:

name    surname    1
name    surname    30000
name    surname    456

答案1

一个awk选择:

awk 'match($2,/[0-9]+$/) {printf("%s\t%s\t%s\n", $1, substr($2,0,RSTART), substr($2,RSTART,RLENGTH))}' filename

这将仅匹配第二列末尾的数字字符串。

答案2

您可以查找第一个数字并将其替换为制表符后跟数字,使用:

sed 's/[0-9]/\t&/' file

答案3

sed -e 's/\([0-9]\)/\t\1/' input.txt

在每行的第一个数字之前添加一个制表符。

输出:

name    surname 1    
name    surname 30000
name    surname 456

答案4

数据可能位于特定的柱子,例如 16:

sed -e 's/^\(.\{15,15\}\)/\1 /'

或者,第三个字段中感兴趣的数据可能不是数字:

sed -e 's/^\([[:alpha:]]\+[[:space:]]\+\)\([[:alpha:]]\+\)/\1\2 /'

其中任何一个都会在数据中的数字(或其他非字母)字符之前放置一个空格。

以供参考:

相关内容