使用awk合併檔案及指令碼解析

2021-07-14 22:19:06 字數 1351 閱讀 5284

昨天在csnd上看到有使用awk合併檔案的乙個問題, 正好這兩天有點時間就簡單整理了其執行過程的分析.

a.txt的檔案內容為:

20114042028 liuyh 90

20114042045 liub 100

20114042013 liubx 100

b.txt的檔案內容為:

20114042013 yuwen

20114042028 shuxue

20114042045 yingyu

我想要的結果為把兩個檔案中key值相同的兩條記錄合併為一條記錄,並輸出到新的檔案c.txt中

20114042028 liuyh 90 shuxue

20114042045 liub 100 yingyu

20114042013 liubx 100 yuwen

awk 'nr==fnrnr>fnr' a.txt b.txt > c.txt

awk 'nr==fnrnr>fnr' b.txt a.txt > c.txt

nr                 已經讀出的行號, 從1開始, 如果有多個檔案的話, 這個值也是不斷累加

fnr 瀏覽檔案的記錄數, 與nr不同這個值是各個檔案自己的行號

然後逐個分解這條指令碼.

awk '' a.txt b.txt
結果為:

1 1 20114042028 liuyh 90

2 2 20114042045 liub 100

3 3 20114042013 liubx 100

4 1 20114042013 yuwen

5 2 20114042028 shuxue

6 3 20114042045 yingyu

#當已讀的行號nr與fnr相同時執行s[$1]=$0;next

#即只掃瞄a.txt中的內容, 把a.txt中的內容賦值給s[$1]

#這裡的s[$1]是乙個map. key=$1 value=$0

#$0:讀取行的內容, $1:讀取行的第一列

nr==fnr

#當已讀的行號nr大於fnr時, 輸入資料

#即: 當讀取b.txt中的內容時, 直接輸出資料.

#輸出的順序為s[$1], $2, $3.

#其中s[$1]是根據b.txt中的第一列從s中取值. $2,$3:b.txt中的第二/三列

nr>fnr

使用awk來解析dump檔案

dump檔案是平時工作中經常碰見的,有時候得到乙個dump,但是沒有提供一些更多的資訊,匯入的時候就很可能會有問題。如果某個使用者預設表空間是user,但是dump中的表所屬的表空間是datas01,則匯入的時候會自動轉換表空間。但是如果表中存在lob欄位 且dump的表空間和目標環境的表空間不一致...

awk 逐行合併檔案

這段時間多虧大家的幫助,利用awk命令解決了很多問題,在此也總結自己實際運用到的問題,方便其他童鞋一起學習shell。如果兩個檔案行數相同,只是希望逐行合併 方法一 paste d t file 1 file 2 複製 方法二 awk nr fnrnr fnr file 1 file 2 複製 方法...

採用Shell及AWK指令碼實現磁碟使用空間監控

背景 在應用程式中,經常需要配置ftp空間存放資料,同樣資料庫也需要大量的磁碟存放業務資料。如果ftp和資料庫磁碟空間不夠,卻沒有及時通知相關人員進行處理,就會導致程式錯誤或者資料庫無法儲存資料。這類故障是及其嚴重的。shell指令碼 disk space warn.sh bin bash 監控磁碟...