a.txt內容如下:
a 150
b 200
c 100
b.txt內容如下:
abcd a 12.5
bbbb b 35
cccc c 42
dddd d 21
想要通過a.txt、b.txt得到ba.txt
abcd a 12.5 150
bbbb b 35 200
cccc c 42 100
dddd d 21
用awk簡單搞定awk 'nr==fnr' a.txt b.txt > ba.txt
解釋:nr:讀入的記錄總數;fnr:當前檔案的讀入記錄數(行數)
讀a.txt時,nr=fnr,都是3行,此時將a的第二個域得內容賦值到map中,其中key為第乙個域的值,因為b的第二個域跟a的第乙個域是一樣的值,賦值完後,直接next不進行後面的{}裡面的輸出。
當a讀取完後,讀取b時,nr==fnr不成立,所以執行第二個{}裡的列印,因此得出結果。
shell功能就是強大啊~~~
AWK實現多檔案讀取和處理
當我們使用awk整合檔案的時候,如果是兩個檔案,我們經常會用nr fnr和nr fnr兩個來指定讀取第乙個或者是第二個檔案,但是如果涉及到三個及以上檔案這種方式就不適用,除非我們使用前面兩個檔案的方式,生成第三者,在用第三者進行整合,也是可以實現,但是這樣子多了個第三者,而且顯得比較笨拙。我們可以使...
awk處理日誌檔案
split出所需要的那一段文字,可以split多次,下標從1開始 split src,dst,分隔符 將所需要的鍵值對得到,並按 tab 分割,這裡只需要乙個,放在變數中 awk f print 在每個檔案中對2中得到的不同值 還是鍵值對,但鍵是相同的 進行統計 awk end 對3中得到的資料進行...
awk 處理資料檔案
一 資料處理 1 程式 begin end a.dat b.dat merge.dat merge.dat 0 100 0 100 1 99 3 102 2 93 0 93 3 90 2 92nr fnr,只有當處理第乙個檔案a.dat時,這個值才返回true,所以相應的處理是把第二列的數賦值給陣列...