解決了一例awk中substr處理漢字字串的bug
本來,awk中的substr在處理中文字串是沒有問題的,但是前幾天卻碰到一個詭異的現象:
————————————————————————————————
[lw]$cat awktest
Title: 123小苵大家
[lw]$cat awktest | awk -F" " '{print $2}'
123小苵大家
[lw]$cat awktest | awk -F" " '{print substr($2,1)}'
123小小|大家
————————————————————————————————
見鬼了不是?
最後採用其他方式解決了此問題:
————————————————————————————————
[lw]$export atstr=`cat awktest | awk -F" " '{print $2}'`
[lw]$echo ${atstr:0:10}
123小苵大家
[lw]$cat awktest | awk -F" " '{print $2}' | cut -c 1-
123小苵大家
[lw]$cat awktest | cut -c 8-
123小苵大家
————————————————————————————————
其實最不解的還是
————————————————————————————————
[lw]$expr substr "`cat awktest`" 8 18
123小苵大家
————————————————————————————————
敢情這倆substr不是一個娘親生的。
對了,彙報下自家的環境
————————————————————————————————
[lw]$ uname -a
Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
[lw]$ locale
LANG=zh_CN
LC_CTYPE="zh_CN"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_COLLATE="zh_CN"
LC_MONETARY="zh_CN"
LC_MESSAGES="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL=
——————————————————————————————————
最終大概明確了問題的所在:awk中的substr,對於LANG設為zh_CN時,實際上是呼叫的zh_CN.gb2312,而awk的print、expr、cut等,調的是zh_CN.gbk。
當明確設定LANG為zh_CN.gbk時,以上各類輸出都表現正常。
————————————————————————————————
[lw]$cat awktest
Title: 123小苵大家
[lw]$cat awktest | awk -F" " '{print $2}'
123小苵大家
[lw]$cat awktest | awk -F" " '{print substr($2,1)}'
123小小|大家
————————————————————————————————
見鬼了不是?
最後採用其他方式解決了此問題:
————————————————————————————————
[lw]$export atstr=`cat awktest | awk -F" " '{print $2}'`
[lw]$echo ${atstr:0:10}
123小苵大家
[lw]$cat awktest | awk -F" " '{print $2}' | cut -c 1-
123小苵大家
[lw]$cat awktest | cut -c 8-
123小苵大家
————————————————————————————————
其實最不解的還是
————————————————————————————————
[lw]$expr substr "`cat awktest`" 8 18
123小苵大家
————————————————————————————————
敢情這倆substr不是一個娘親生的。
對了,彙報下自家的環境
————————————————————————————————
[lw]$ uname -a
Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux
[lw]$ locale
LANG=zh_CN
LC_CTYPE="zh_CN"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_COLLATE="zh_CN"
LC_MONETARY="zh_CN"
LC_MESSAGES="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL=
——————————————————————————————————
最終大概明確了問題的所在:awk中的substr,對於LANG設為zh_CN時,實際上是呼叫的zh_CN.gb2312,而awk的print、expr、cut等,調的是zh_CN.gbk。
當明確設定LANG為zh_CN.gbk時,以上各類輸出都表現正常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-706228/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- awk 字串處理字串
- 去除字串中的漢字function字串Function
- 漢字處理問題?
- mysqlconnect bug 處理一例。MySql
- 獲取字串中的所有漢字字串
- 使用awk批處理在字串中增加特殊符號字串符號
- awk強大的字串處理能力,快捷又方便字串
- javascript替換字串中的某個漢字JavaScript字串
- Java 判斷字串中是否含有漢字.Java字串
- 正規表示式刪除字串中的漢字字串
- Awk 字串連線操作(字串轉數字,數字轉字串)字串
- 關於FORM中錄入漢字易當機的解決方法ORM
- 處理一串字串的關鍵字字串
- vi在修改漢字的時候,把漢字作為一個字元處理的設定辦法字元
- substr擷取字串字串
- php 擷取漢字字串 亂碼解決 支援utf8和gb2312的編碼的漢字PHP字串
- Oracle中如何判斷一個字串是否含有漢字(中文)Oracle字串
- C++中的字串編碼處理C++字串編碼
- 請文在EJB2.0下處理漢字問題
- C# UTF8字串轉漢字C#字串
- AWK學習一例
- Js中substr,substring,slice擷取字串的異同JS字串
- JavaScript 刪除字串中非漢字內容JavaScript字串
- JavaScript獲取字串的長度區分漢字JavaScript字串
- 對於數字或者字串有限的問題的處理字串
- word中visio圖形中的漢字列印出來為小方塊的解決辦法
- jive 漢字問題終極解決辦法
- MySQL 動態字串處理詳解MySql字串
- SQL中的常用的字串處理函式大全SQL字串函式
- 如何使用awk處理文字內容
- [AWK]使用AWK進行分割字串以及擷取字串字串
- 研究心得------->Seskin控制元件包中SeskinEdit漢字問題的解決辦法 (轉)控制元件
- 002——php字串中的處理函式(一)PHP字串函式
- 簡單的字串處理字串
- 字串的封送處理字串
- shell中字串的處理字串
- 處理字串的小程式字串
- 【問題處理】使用trim和 replace處理字串中的換行符號字串符號