昨天在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 監控磁碟...