2016-08-03 6 views
0

列5に「p」が含まれている場合は、列4に「end」と「p11」が表示され、列5に「p」が含まれている場合は、 Q」他の列が特定の条件を満たしている場合にawk gensubを使用する

私は毎回交換したい 『最後は、pを『4列が含まれている場合は、 『』、およびに置き換える 『Q『

』を4列が含まれている場合は、』 Q11 P11』でカラム5に表示します』この入力

Bill 89 22 9end q12 2683 2687 
Sue  21 20 4end p13 9390 9302 
Sam  89 9 p12 p11 9029 9032 
Lee  39 20 q12 6end 3892 9032 
Smitty 93 7 p13 5end 3902 3902 

で、私は

たい
Bill 89 22 q11 q12 2683 2687 
Sue  21 20 p11 p13 9390 9302 
Sam  89 9 p12 p11 9029 9032 
Lee  39 20 q12 q11 3892 9032 
Smitty 93 7 p13 p11 3902 3902 

出力として

です。

..

私は基本的にこのようなしかし、正しい構文でコマンドをしたい、それが

awk BEGIN {OFS="\t"} ($5 ~ /q/ {$4=gensub(/[0-9]end/,"q11",1,$4); print}) || ($5 ~ /p/ {$4=gensub(/[0-9]end/,"p11",1,$4); print}) || ($4 ~ /q/ {$5=gensub(/[0-9]end/,"q11",1,$4); print}) || ($4 ~ /q/ {$5=gensub(/[0-9]end/,"q11",1,$4); print})' input 

未調整の非一致した行を出力します。

..

私はこの

awk 'BEGIN {OFS="\t"} {$4=gensub(/[0-9]end/,"q11",1,$4); print}' input 

を実行し、出力

Steve 89781 22 q11 q12 26839389 26879820 

としてこれを取得するしかし、私は結果が欲しいことができ、この入力

Steve 89  22  2end q12  2683 2687 

を知っています列にp11を入れる混乱

+0

@エドモートン私の質問を無視することができます。私はgensubの使い方を知らないが、私の他の質問はどれもそれを助けるつもりはないが、その教科書を見ている。 – Jacob

+0

@EdMorton問題は、すべての単一の行を印刷するが、条件に合致する行はそれらに代入されます。私が 'awk' BEGIN {OFS = "\ t"} $ 5〜/ q/{$ 4 = gensub(/ [0-9] end /、 "q11"、1、$ 4)のようなものを実行すると、 print} input 'を実行すると、1行だけが出力されます。私は、行1列ごとに異なる行を出力するものと、列 – Jacob

+1

に基づいているので、ステップ1は、条件が真であるときにのみ実行されるブロックの外に 'print'を移動することです。つまり、'/foo/{bar; print} 'を'/foo/{bar} {print} 'にします。あなたが仕事をやりたいときにチュートリアルや本を読む時間を取るのは難しいことを知っています(私を信じて - 私は最初の仕事を試みる前に5日間のコースでRuby On Railsを学んでいますあなたがそれをやっていないならば、最も簡単なことをやり遂げる方法を疑問に思って、後に大量の間違いを取り除かなければならない、自分の時間を無駄にするだけです。 –

答えて

3

は何をあなたを行うための簡単な方法があります場合は私に知らせてください列5

と同じことを行うことができるように列の4つの代わりにP12を持っていたし、私も同じawkコマンドたいです欲しい:他のawksマッチ()/ SUBSTRを(使用して

$ cat tst.awk 
BEGIN { OFS="\t" } 
($4 ~ /end/) && match($5,/[pq]/,a) { $4 = a[0] "11" } 
($5 ~ /end/) && match($4,/[pq]/,a) { $5 = a[0] "11" } 
{ $1=$1; print } 

$ awk -f tst.awk file 
Bill 89  22  q11  q12  2683 2687 
Sue  21  20  p11  p13  9390 9302 
Sam  89  9  p12  p11  9029 9032 
Lee  39  20  q12  q11  3892 9032 
Smitty 93  7  p13  p11  3902 3902 

は上記は、()と一致するように、第三引数のためのGNU AWKを使用しています)。

本を読む...

関連する問題