|
藍森林 http://www.lslnet.com 2006年6月26日 11:18
請教:一個關於文本編輯的shell?
0|安強|3009431512|0517|3952763|2003/11/14|0.01|0.75|65.74|65.74|65.00|20030921|2
0031020|1|01209|600127|基本月租費|15.00|區內電話費|14.20|區間電話費|2.50|長途電?
胺褆16.94|IP電話費|17.10|
如何將上述一條記錄中「基本月租費」前的"|"改為"," |
試試
試試
[code]
sed 's/|基本月租費/\,基本月租費/g '
[/code] |
sed 's/|\(基本月租費\)/,\1/g' datafile |
不好意思,我是想把基本月租費之前的所有"|"用","置換
請問如何實現 |
sed ':a;s/|\(.*基本\)/,\1/;ta' ur-file
請讀... |
-->
try:
[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}'[/code] |
-->
暈,JB月租費都能當FS用,虧你想的出[img]http://www.lslnet.com/linux/#images/smilies/icon_mrgreen.gif[/img] |
[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}'[/code]
四川話:腦殼夠難。:shock: |
呵呵,不想做循環而已。^_^
用字符串做FS有什麼問題?正則做FS也行啊。 |
-->
[color=red]g[/color]sub
通常這個字符就暗示著循環[img]http://www.lslnet.com/linux/#images/smilies/icon_mrgreen.gif[/img] |
-->
歡迎抬槓!^_^
sed/awk依次讀入每一行就更加是循環。 |
電腦本身就是死循環,所以俺從來不考慮是不是一定要用循環或不用,反正已經在用了 |
你不考慮我不反對,反正我是考慮的。^_^ |
呵呵,有創意.
但是我的終端不知道如何輸入中文. |
謝謝寂寞烈火
不過我的行數怎麼會執行後變少了呢???:em14: |
不清楚你數據的具體情況,「基本月租費」可能不出現的話需要改一下:
[code]awk -F "基本月租費" 'NF==2{gsub(/\|/, ",", $1);print $1 FS $2}NF<2'[/code]
bye the way, I am WOODIE. ^_^ |
再來一個perl的:
[code]perl -pe 's/\|(?=.*基本月租費)/,/g'[/code] |
請問那最後加的NF<2是判斷什麼內的呢?
兩次結果確實不同
還有前面的/\|/是轉義嗎? |
謝謝woodie |
-->
以字符串「基本月租費」作為awk的字段分隔符,何時字段數NF會小於2?當然是字段分隔符沒出現,整個行只有一個字段的情況。
\|為何要轉移呢?因為|在正則表達式中有特殊的含義,這裡我們要用的是|字符本來的含義,所以轉義。
那為何在sed中不用轉義呢?因為不同的程序對一些特殊字符的處理不同。正則表達式在不同的程序有不同的實現,你可以參考飛灰橙的一篇精華帖子:正則的迷霧。 |
| |