如何使用 AWK gsub 函数拆分列?

How to use AWK gsub function to split columns?

如何使用 gsub 拆分列?

下面是示例文件,我想将第二列分成两列。

> cat seq.txt
Hello/World /app/oracle/data/app4/trail/hb000003
Hello/World /app/oracle/data/app1/trail/gg000028
Hello/World /app/oracle/data/app1/trail/kk000111
Hello/World /app/oracle/data/app1/trail/kk000111
Hello/World /app/oracle/data/app3/trail/mw000021
Hello/World /app/oracle/data/app2/trail/pj000009
Hello/World /app/oracle/data/app1/trail/fx000276
Hello/World /app/oracle/data/app1/trail/fx000006
Hello/World /app/oracle/data/app1/trail/fx000006
Hello/World /app/oracle/data/app1/trail/fx000276
Hello/World /app/oracle/data/app1/trail/gt000005
Hello/World /app/oracle/data/app4/trail/xh000001

尝试过 this.But 似乎 gsub 没有读取正则表达式作为替代。

> cat seq.txt | awk -F" " '{gsub(".*/..",".*/.. ",)}1'
Hello/World .*/.. 000003
Hello/World .*/.. 000028
Hello/World .*/.. 000111
Hello/World .*/.. 000111
Hello/World .*/.. 000021
Hello/World .*/.. 000009
Hello/World .*/.. 000276
Hello/World .*/.. 000006
Hello/World .*/.. 000006
Hello/World .*/.. 000276
Hello/World .*/.. 000005
Hello/World .*/.. 000001

以下是我所期待的。

Hello/World /app/oracle/data/app4/trail/hb  000003
Hello/World /app/oracle/data/app1/trail/gg  000028
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app3/trail/mw  000021
Hello/World /app/oracle/data/app2/trail/pj  000009
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/gt  000005
Hello/World /app/oracle/data/app4/trail/xh  000001

gawk的gensub

$ awk '{=gensub(/(\/..)([^/]+)$/,"\1  \2",1,)}1' file

Hello/World /app/oracle/data/app4/trail/hb  000003
Hello/World /app/oracle/data/app1/trail/gg  000028
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app3/trail/mw  000021
Hello/World /app/oracle/data/app2/trail/pj  000009
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/gt  000005
Hello/World /app/oracle/data/app4/trail/xh  000001

当然替换不采用正则表达式。那不会有用的。他们会和什么比赛?你想要的是从模式中捕获的内容。

替换中的字符&表示匹配的整个文本,所以你想要的是:

awk -F " " '{gsub(".*/..", "& ", )}7'
awk '{sub(/000/,"  000")}1' file 
Hello/World /app/oracle/data/app4/trail/hb  000003
Hello/World /app/oracle/data/app1/trail/gg  000028
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app1/trail/kk  000111
Hello/World /app/oracle/data/app3/trail/mw  000021
Hello/World /app/oracle/data/app2/trail/pj  000009
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000006
Hello/World /app/oracle/data/app1/trail/fx  000276
Hello/World /app/oracle/data/app1/trail/gt  000005
Hello/World /app/oracle/data/app4/trail/xh  000001