awk 多檔案操作2種實現方法

2021-06-21 06:59:15 字數 4464 閱讀 9932

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

例項文字: 1

2

3

4

5

6

7

8

9

10

11

12

13

[chengmo@centos5 shell]$awk'fnr==1'a.txt b.txt

a.txt

100     wangman

200 wangsan woman

300 wangmingman

400 wangzhengman

b.txt

100 90 80

200 80 70

300 60 50

400 70 20

需要合併得到結果:

100     wang    man 90  80

200 wangsan woman 80    70

300 wangming man 60     50

400 wangzheng man 70    20

實現思路:

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

首先:1

2

3

4

5

6

7

8

9

[chengmo@centos5 shell]$cata.txt b.txt |sort-n -k1 |awk''

100 90 80

100     wangman

200 80 70

200 wangsan woman

300 60 50

300 wangmingman

400 70 20

400 wangzhengman

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

繼續:1

2

3

4

5

[chengmo@centos5 shell]$cata.txt b.txt |sort-n -k1 |awk'nr%2==1'

100     wangman90      80

200 wangsan woman       80      70

300 wangmingman60      50

400 wangzhengman70      20

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

實現思路

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

看下這些例項:

1

2

3

4

5

6

7

8

9

10

[chengmo@centos5 shell]$awk'begin'a.txt b.txt

3awka.txt b.txt

a.txt 1 1 100   wangman

a.txt 2 2 200 wangsan woman

a.txt 3 3 300 wangmingman

a.txt 4 4 400 wangzhengman

b.txt 5 1 100 90 80

b.txt 6 2 200 80 70

b.txt 7 3 300 60 50

b.txt 8 4 400 70 20

程式**:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[chengmo@centos5 shell]$awk'

begin

file="";

}

end

}

}' a.txt b.txt

100     wangman90  80

200 wangsan woman 80    70

300 wangmingman60     50

400 wangzhengman70    20

**說明:

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

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

awk 多檔案操作2種實現方法

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

AWK實現多檔案讀取和處理

當我們使用awk整合檔案的時候,如果是兩個檔案,我們經常會用nr fnr和nr fnr兩個來指定讀取第乙個或者是第二個檔案,但是如果涉及到三個及以上檔案這種方式就不適用,除非我們使用前面兩個檔案的方式,生成第三者,在用第三者進行整合,也是可以實現,但是這樣子多了個第三者,而且顯得比較笨拙。我們可以使...

reduce 方法實現 webpack 多檔案入口

這篇日誌,在開始接觸 webpack 時候就該寫了,現在發布也許對一些剛入此坑的童鞋能些許幫助。即使有點 low,重要的仍是分享 reduce 函式的設計意圖就是方便進行疊加運算 var arr 0,1,2,3 reduce 實現累加 var total arr.reduce function pr...