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.sortedsort -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,看來業績相當好,其餘資料的解讀就不綴述。

时间: 2024-10-13 02:43:22

sort、join 處理 csv 檔案的相关文章

C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLTXvXJlIqeavUo1Ak%3D&b=6 如果要在 C++ 裡對特定的檔案做存取,其實透過 STL 的 fstream(參考)來做,一般是不會有什麼問題的:相對的,問題比較大的部分,可能會是在於對於資料夾(folder.directory)的處理,以及對於路徑的操作上.像是以路徑來說,Windo

NIO.2: 目錄的處理

檔案系統的 I/O,除了前幾篇所說明的檔案相關處理外,另一個主題就是目錄的處理 - 讀取.走訪.過濾檔案等,說明如下: 取得根目錄 1 package idv.steven.nio2.filedir; 2 3 import static java.lang.System.out; 4 import java.nio.file.FileSystems; 5 import java.nio.file.Path; 6 import java.util.ArrayList; 7 8 public cla

[ASP.NET] 如何利用javascript分割檔案上傳至後端合併

最近研究了一下如何利用javascript進行檔案分割上傳並且透過後端.特地記錄一下相關的用法 先寫限制跟本篇的一些陷阱 1.就是瀏覽器的支援了 因為本篇有用到blob跟webworker 在ie中需要最少10版以上才有支援以下的方法喔! 2.因為我這是簡單的測試,所以我是將檔案存放在Session當中,實際要使用的話.應該會是將檔案分割存放在檔案系統中 廢話就不多說,我們先來看js端的程式碼 self.onmessage = function (e) { ////web worker star

利用XSD配合XSLT產出特定格式Word檔案 -摘自网络

利用類別產生XSD檔 產出XSD檔的目的在於提供Word樣板設計之資料框架 在此使用微軟提供之XML Schema Definition Tool (Xsd.exe)工具產生XSD檔 1. 定義類別 view source print? 01 // 書籍資料 02 public class Book 03 { 04     public string BookId { get; set; } 05     public string Name { get; set; } 06     publi

使用 Watch Service API 觀察檔案系統

在 Java 7 以前,如果要觀察一個目錄下的檔案是否有異動 (新增.修改.刪除),唯一的辦法就是開啟一個 thread,每隔一段時間去檢查一下,當發現有異動,發出異動的訊息.Java 7 提供了 Watch Service API 解決了這個問題,現在不需要再這麼麻煩且浪費系統資源了,透過這組 API 程式可以很優雅.簡單的監控檔案系統的異動狀況. 如下的程式,會監控 D:\temp 這個目錄,如果這個目錄有任何檔案新增.修改.刪除,就會產生 event. 1 package idv.stev

使用 NIO.2 操作檔案系統

Java 一直到 JDK 1.3 為止,都是使用 java.io 下的類別進行 I/O 的處理,對這有興趣的鄉民,可以參考「Java I/O」,那是我 13 年前整理的 ... XD.JDK 1.4 之後提供了 NIO,到了 JDK 1.7 又加上些新的功能,稱為 NIO.2,這些類別都被放在 java.nio 下,一般來說,使用 java.nio 類別操作檔案系統,會比使用 java.io 效率來的高且方便. 在進入主題前,各位不妨先看一下我之前整理的「Working with the Pat

高效能人士好評的 Listary 中文版檔案搜尋十大招教學

有一個老牌的免費軟體在高效能工作者之間廣受好評,可以改變檔案瀏覽.開啟.管理的繁瑣步驟,但電腦玩物上一直遲遲沒有特別介紹.他可以媲美「 Ditto」這樣的強化剪貼簿軟體,是簡化日常瑣碎工作操作的好工具,隨時都用得到,上手後的朋友很可能離不開他. 這款軟體就叫做:「 Listary 」,他是一款檔案搜尋器,但他帶來的改變不只是加快搜尋,而是加快 Windows 上全面的檔案處理效率. 「 Listary 」的主標語是:「Keep files at your fingertips」,意思是透過鍵盤上

使用handlebars.js來處理json template

使用json資料後的套版問題 我相信很多人在取得json資料後會用Jquery處理套版的問題: $.ajax({ ... .done(function(data) { var context = $("<ul></ul>"); $.each(data, function(i, v){ content.append('<li>' + v + '</li>'); ... }); }); }); 數量上面少還好,如果是很複雜的template,

【香港記事】 路不拾遺與失物處理

https://hk.news.appledaily.com/local/daily/article/20170123/19906005 最近我也遇到跟新聞主題類似的情況,不過我的處理手法跟她不一樣,我也說說我的經過吧,希望對旅遊的你來說,有一點點幫助吧! 我在某個地方拾貨一個文件皮包,裡面有個人證件(身份證.回鄉證.八達通.深圳通等),我並沒有第一時間撥打999電話,讓警察前來處理,因為有可能不知道等多久,而是直接將皮包交給了我附近的警局,并進行了登記. PS:如果3個月內這件失物沒人認領,這