2016-08-08 6 views
1

gsubを使用して列を分割するにはどうすればよいですか?AWK gsub関数を使用して列を分割する方法は?

以下は、2番目の列を2つに分割するサンプルファイルです。

> 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 

このように試してみました。しかし、gsubは正規表現を置き換えて読み込まないようです。

> cat seq.txt | awk -F" " '{gsub(".*/..",".*/.. ",$2)}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 

答えて

4

正規表現を取ることはありません。それは役に立たないでしょう。彼らは何に対して一致するでしょうか?あなたが望むのはパターンからのキャプチャです。

置き換え内の文字&がマッチしたテキスト全体を意味しますので、欲しいものです:あなたが最後に7を持っている理由

awk -F " " '{gsub(".*/..", "& ", $2)}7' 
+0

あなたが私に教えてくださいことはできますか? – CodeDevotion

+0

あなたの '1'(または他の真理値)と同じことをしますが、誰かがすぐにスクリプトを読んで見落とす可能性は少し低くなります。私はそれを使った人の誰かからそれを突きつけた。 –

+0

よろしいですか。ありがとう... – CodeDevotion

1
gawkのgensubで

$ awk '{$2=gensub(/(\/..)([^/]+)$/,"\\1 \\2",1,$2)}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 
0
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 
関連する問題