| 項目 | 日期 | |
|---|---|---|
| * |
Environment
| |
| 1 | Ubuntu 上的 PPPoE 設定 |
2020/05/01
|
| 2 | ssh 公鑰認證登入 |
2015/02/16
|
| 3 | 在 linux 中無法切換身份? (su: Permission denied) |
2017/12/22
|
| 4 | RHEL8 無法安裝套件 No match for argument: xxx |
2022/03/27
|
| 5 | install nfs server@Ubuntu |
2023/11/08
|
| * |
Shell Scripting
| |
| 1 | 使用 sort、join 處理 csv 檔案 |
2015/01/16
|
| 2 | EBCDIC <=> ASCII 間的轉換 |
2015/01/17
|
| * |
C Programming
| |
| 1 | Linux Network Programming - 初體驗 |
2015/05/23
|
| 2 | byte ordering functions |
2015/05/26
|
| 3 | fork Function |
2015/06/06
|
Google Code Prettify
2015年10月25日 星期日
Linux / Unix
2015年1月17日 星期六
EBCDIC <=> ASCII 間的轉換
即使常聽到許多公司"計畫"將 IBM 的 z/OS 和 AS400 替換成 open 系統,但是聽了20年後,還是有非常多的系統使用 z/OS 或 AS400 … ╮(╯▽╰)╭
這兩個系統的內碼採用 EBCDIC 和一般開放系統的 ASCII 不一樣,所以系統整合時,無可避免的要在兩種編碼間轉換,UNIX 有提供一個指令 - dd,可以完成這件事,如下:
假設現在有一個 ascii 編碼的檔案,檔名為 sales.csv。
- ASCII => EBCDIC
dd conv=ebcdic if=sales.csv of=sales.ebcdic
- EBCDIC => ASCII
dd conv=ascii if=sales.ebcdic of=sales.ascii
dd 這個指令很簡單,用 conv 選項設定要轉成什麼編碼,用 if 指定輸入檔檔名,of 指定輸出檔檔名。
2015年1月16日 星期五
使用 sort、join 處理 csv 檔案
雖然理想上,使用者要的資料最好都是由系統產生報表,使用者直接瀏覽或下載,但是,使用者常臨時要一些業績或管理性報表,IT 人員也只能從資料庫中下 sql statement 後匯出給使用者,有時,IT 人員更可能拿到別家公司匯出的數個 csv 檔,使用者卻希望將它們合併成一個檔案,當然,一般情況 IT 人員應該會找到一台資料庫,把檔案匯入處理後,再匯出給使用者,不過,IT 人員的環境裡並不總是有資料庫可以使用 (可能是控管嚴格沒有權限) ,這時候可以使用 Unix 中的一些指令來處理,Unix 通常鼓勵處理資料時,用文字檔的方式處理,所以,提供了非常豐富的處理文字檔指令,這裡要介紹的是 sort 和 join,透過這兩個指令可以將兩個 csv 檔像在資料庫中下 sql statement 將兩個 table 的資料 join 在一起一樣。
假設有兩個 csv 檔如下:
- 業務員業績配額 (quotas.csv)
chris,95 michael,200 marry,200 herman,80 jane,75 joe,50
- 業務員業績達成值 (sales.csv)
桃園分行,chris,300 高雄分行,herman,150 高雄分行,jane,200 台南分行,joe,100 宜蘭分行,michael,180 台北分行,marry,210
這兩個檔案是 key 都是人名,所以,join 時就以人名為 key,指令如下
sort -t ',' -k 1 quotas.csv > quotas.sorted sort -t ',' -k 2 sales.csv > sales.sorted
先對兩個檔案排序,這是要使用 join 前的規定,一定要先排序! 指令中的 -t ',' 表示,檔案的分隔符號是逗號,-k 1 或 -k 2 表示該檔案的 key 是第幾個欄位。
join -t ',' -1 2 sales.sorted -2 1 quotas.sorted > result.csv
這樣就產生結果到 result.csv 中,-t 的選項如 sort 也是指分隔符號,-1 2 是指第 1 個檔案是以第 2 個欄位為 key,-2 1 則是指第 2 個檔案是以第 1 個欄位為 key,產生的結果如下:
chris,桃園分行,300,95 herman,高雄分行,150,80 jane,高雄分行,200,75 joe,台南分行,100,50 marry,台北分行,210,200 michael,宜蘭分行,180,200
第一筆資料指出,chris 在桃園分行,業績值 300,業績配額是 95,看來業績相當好,其餘資料的解讀就不綴述。
訂閱:
意見 (Atom)