環境
RedHat Linux 9 + VWWare 8.0 + SSH 3.2.9
問題
假設有一個CSV(comma separated value)文件,裡面有一些我們需要的信息 ,但是格式卻有問題,目前數據的列順序是:
姓名,公司名,州名縮寫,郵政 編碼,現在我們希望講這些數據重新組 織,以便在我們的某個軟件中使用,
需要的格式為:姓名,州名縮寫-郵政編碼,公司名。
也就是說,我們要調整 列順序,還要合並兩個列來構成一個新列。另外, 我們的軟件不能接受逗號前後 面有任何空格(包括空格和制表符)所
以我們還必須要去掉逗號前後的所 有空格。
原文件是這樣的:
Bill Jones,? ? ?HI-TEK Corporation ,? CA, 95011
Sharon Lee Smith,? Design Works Incorporated,? CA, 95012
B. Amos? ?,? Hill Street Cafe,? CA, 95013
Alexander Weatherworth,? The Crafts Store,? CA, 95014
我們希望把它變成這個 樣子:
Bill Jones,CA 95011,HI-TEK Corporation
Sharon Lee Smith,CA 95012,Design Works Incorporated
B. Amos,CA 95013,Hill Street Cafe
Alexander Weatherworth,CA 95014,The Crafts Store
解決
步驟一:將源文件保存成文本文檔,如test.txt
步驟二:將test.txt 上傳到Linux中,這裡可以使用SSH的文件上傳功能。
步驟三:將test.txt用vi打開 www.bianceng.cn
步驟四:執行以下命令(輸入命令時注 意輸入冒號,退出保存輸入wq,退出不保存使用q或者q!):
1 去掉所有 的問號(?)
%s/?//g
2 去掉逗號前後的所有空格
%s/[ \t]*,[ \t]*/,/g
3 實現功能
%s/\([^.]*\),\([^.]*\),\([^.]*\),\([^.]*\)/\1,\3 \4,\2/g
實現效果