如何使用 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
如何使用 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