Awk 多檔案操作的實現方法

發表於2015-10-15

我們經常會將2個有關聯文字檔案進行合併處理。分別從不同檔案獲取需要的列,然後,整體輸出到一起。awk進行多檔案處理時候,常常會遇到2個方面問題,第一個是怎麼樣合併多個檔案為一個檔案。第二個問題就是怎麼樣將多行合併為一行顯示。我這裡說下我的處理2種方法,還有實現思路。

例項文字:

需要合併得到結果:

100 wang man 90 80
200 wangsan woman 80 70
300 wangming man 60 50
400 wangzheng man 70 20

  • awk多檔案操作方法一:

實現思路:

通過外部命令合併檔案,然後通過排序,然後通過awk進行合併操作。

首先:

現在需要把:第一列相同的處理合併到一行,這裡需要用“next”語句。它操作,可以參考awk 多行合併【next 使用介紹】(常見應用4)

繼續:

需要把幾行合併,經常用到方法是:NR%num 然後將行值儲存下來,next該行。在輸出時候列印出來。

 

  • awk多檔案操作方法二

實現思路

不借助第3放工具開啟,直接通過awk 開啟多個檔案。然後可以通過:FILENAME獲得當前處理檔名。NR總記錄 FNR當前檔案記錄,以及ARGC傳入引數總數,ARGV是陣列,各個引數值。

看下這些例項:

程式程式碼:

程式碼說明:

這裡用到2維陣列,aData[檔名,關聯列對應值] ,這種方法可以將多個檔案內容。放入一個統一二維陣列。然後迴圈陣列,通過if((i,j} in array) 查詢對應列值,在其它檔案中是否存在。

以上是2種實現方法,其中第一種思路較為簡單,很容易理解。第二種處理起來較為複雜。有更好方法大家給我分享。

相關文章