請使用awk命令將如下兩份檔案中名字相同的兩行合併起來1
2
3
4
5
6
7
8
9
10
[root@localhost ~]
# cat 1.txt
韓海林 21歲
海林韓 23歲
韓林海 22歲
林海韓 24歲
[root@localhost ~]
# cat 2.txt
韓林海 男
海林韓 男
韓海林 男
林海韓 男
輸出效果:
韓海林 21歲 男 1
2
3
4
5
[root@localhost ~]
# awk 'nr==fnrnr>fnr' 2.txt 1.txt
韓海林 21歲 男
海林韓 23歲 男
韓林海 22歲 男
林海韓 24歲 男
1
2
3
4
5
6
[root@localhost~]
# awk 'nr==fnrnr>fnr' 2.txt 1.txt > 3.txt
[root@localhost ~]
# cat 3.txt
韓海林 21歲 男
海林韓 23歲 男
韓林海 22歲 男
林海韓 24歲 男
解釋:在awk裡,nr和fnr的含義相近,唯一的區別就是作用範圍,nr是所有讀取的行資訊計數,而fnr是正在讀取檔案的行資訊計數,fnr在檔案切換時會從0重新開始計數,所以上述語句的意思是:
nr==fnr nr最大值為4,fnr值為1-4,以2.txt的第乙個資料項為key,$2即第2列為資料組成陣列;
nr>fnr 此時nr=(2.txt的總行數+fnr),nr最大值為8,fnr則重新從1-4計數,判斷第乙個資料項在不在2.txt資料組成的陣列裡,如果在,則列印本行加陣列項。
nr是英文number of record的簡寫,就是awk每從檔案或輸入流中讀入一行資料,就把這個變數加一。這個是awk自帶的變數。
其他的解釋:
nr==fnr
開啟第乙個檔案2.txt,把檔案裡面的$2列的內容存入到a[$1]這個陣列。
nr>fnr
然後開啟第二個檔案,列印1.txt一行內容,然後列印第乙個檔案a[$1]陣列的內容。
加入if判斷,更容易理解,上面的命令省略了;判斷1.txt的第一列內容在a陣列裡面,列印整行內容和a[$1]陣列內容;
1
2
3
4
5
[root@localhost ~]
# awk 'nr==fnrnr>fnr' 2.txt 1.txt
韓海林 21歲 男
海林韓 23歲 男
韓林海 22歲 男
林海韓 24歲 男
檔案順序不同,結果也不同; 1
2
3
4
5
[root@localhost ~]
# awk 'nr==fnrnr>fnr' 1.txt 2.txt
韓林海 男 22歲
海林韓 男 23歲
韓海林 男 21歲
林海韓 男 24歲
2 2 循壞結構及其應用文字輸入
設計迴圈時的幾條指導原則 1 指定迴圈終止條件 2 在首次測試前初始化條件 3 在條件被再次測試之前更新條件 c 允許在for迴圈初始化部分中宣告和初始化變數,c不允許,這種變數離開迴圈後就會消失。include string word cin word for int i word.size 1 ...
time庫的簡單應用 文字進度條
執行效果如圖 文字進度條.py by dingzeyuan import time as t scale 10print 執行開始 for i in range scale 1 a i b scale i c i scale 100 print format c,a,b t.sleep 0.1 pr...
awk語法與文字應用處理
awk命令的一般形式 awk begin pattern1 pattern2 patternn end input filename 其中,begin 和 end 是可選的。awk的執行過程如下 1,如果存在begin,awk首先執行它指定的actions。2,awk從輸入中讀取一行,稱為一條輸入記...