0
如果第5列中包含「p」,並且第5列中包含「p11」,並且第5列中包含「p11」,並且將其替換爲「q11」 q」如果其他列滿足某些條件,則使用awk gensub
我要替換每次‘結束’顯示,在5列有‘P11’如果第4列中包含‘p’,而代之以‘Q11’如果第4列中包含‘q’
有了這個輸入
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
。
..
我知道這個輸入
Steve 89 22 2end q12 2683 2687
我可以運行此
awk 'BEGIN {OFS="\t"} {$4=gensub(/[0-9]end/,"q11",1,$4); print}' input
而得到這個作爲輸出
Steve 89781 22 q11 q12 26839389 26879820
但我想要的結果列中有p11四列有P12,而不是和我也想同樣的awk命令,以便能夠做同樣的事情與列5
請讓我知道,如果有任何混淆
@EdMorton然後你可以忽略我的問題。我不知道如何使用或與gensub,我的其他問題都沒有幫助,但我正在通過它的教科書 – Jacob
@EdMorton問題是,我想要每一行打印,但只想確定符合條件的行會對其執行替換。如果我運行'awk'BEGIN {OFS =「\ t」} $ 5〜/ q/{$ 4 = gensub(/ [0-9] end /,「q11」,1,$ 4);打印}輸入',則只打印一行。我希望每行打印一行,並根據列 – Jacob
的不同列出不同的替代項,因此第1步是將'print'移動到只在條件成立時才執行的塊的外部,即更改'/ foo/{bar; print}'到'/ foo/{bar} {print}'。看,我知道當你只想完成一項工作時,很難花時間閱讀教程或書籍(請相信我 - 現在我正在學習Ruby On Rails,開始爲期5天的課程,然後再嘗試完成我的第一項任務使用它),但如果你不這樣做,你只是浪費你自己的時間,想知道如何做最簡單的事情,並在以後清理大量的錯誤。 –