getline函式呼叫時,awk將會把下一條記錄讀入賦值給$0,因此相當於已經跳到下一行了。
你的程式上面那個,由於在awk中有多次getline,因此一開始把記錄定位到第二行,即第一個檔案,然後每呼叫一次"md5sum"name1|getline;記錄就跳到了下一行,輸出是不會重複的。
而下面的那個程式,沒有多次getline呼叫,awk按行掃描,每次會把當前行的檔名賦值給name2,同時name1又記錄了上一次的檔名,因此出現了test01兩次,test02兩次
事實上,輸出和掃描行的對應關係是:
先在BEGIN段跳過兩行,當前行為test,name賦值得到test
然後逐行掃描,當前掃描行是test01時,輸出了testtest01
當前掃描行是test02時,輸出了test01test02
當前掃描行是test02時,輸出了test02test03
所以一共出現6行,中間有重複
getline函式呼叫時,awk將會把下一條記錄讀入賦值給$0,因此相當於已經跳到下一行了。
你的程式上面那個,由於在awk中有多次getline,因此一開始把記錄定位到第二行,即第一個檔案,然後每呼叫一次"md5sum"name1|getline;記錄就跳到了下一行,輸出是不會重複的。
而下面的那個程式,沒有多次getline呼叫,awk按行掃描,每次會把當前行的檔名賦值給name2,同時name1又記錄了上一次的檔名,因此出現了test01兩次,test02兩次
事實上,輸出和掃描行的對應關係是:
先在BEGIN段跳過兩行,當前行為test,name賦值得到test
然後逐行掃描,當前掃描行是test01時,輸出了testtest01
當前掃描行是test02時,輸出了test01test02
當前掃描行是test02時,輸出了test02test03
所以一共出現6行,中間有重複