行完全相同
- 輸出兩個文件中相同的行 grep -f $file1.txt $file2.txt
root@ae02635267dc:/workspace/autohome/test/shell/awk# cat file2.txt |shuf|head -n 2 >file2_part.txt
root@ae02635267dc:/workspace/autohome/test/shell/awk# cat file2.txt
name1 data1 dada2 data3 data4 dada5
name2 dada6 data7 dada8
name3 data9 dada10 data11 dada12
name4 data13 dada14
name5 data15 dada16
name6 data17 data18
root@ae02635267dc:/workspace/autohome/test/shell/awk# cat file2_part.txt
name5 data15 dada16
name3 data9 dada10 data11 dada12
root@ae02635267dc:/workspace/autohome/test/shell/awk# grep -f file2.txt file2_part.txt
name5 data15 dada16
name3 data9 dada10 data11 dada12
行不完全相同
- 行中部分列對應相同。如下所示,file1.txt的第二列與file2.txt的第一列對應相等。表格的第三列爲待輸出內容
file1.txt | file2.txt | 待輸出 |
no1 name1 no2 name2 no3 name2 no4 name3 no5 name4 no6 name4 no7 name4 no8 name5 no9 name6 no10 name6 |
name1 data1 dada2 data3 data4 dada5 name2 dada6 data7 dada8 name3 data9 dada10 data11 dada12 name4 data13 dada14 name5 data15 dada16 name6 data17 data18 |
no1 name1 data1 dada2 data3 data4 dada5 no2 name2 dada6 data7 dada8 no3 name2 dada6 data7 dada8 no4 name3 data9 dada10 data11 dada12 no5 name4 data13 dada14 no6 name4 data13 dada14 no7 name4 data13 dada14 no8 name5 data15 dada16 no9 name6 data17 data18 no10 name6 data17 data18 |
root@ae02635267dc:/workspace/autohome/test/shell/awk# awk -F " " 'NR==FNR {a[$1]=$0} NR>FNR {print $1 " " a[$2]}' file2.txt file1.txt
no1 name1 data1 dada2 data3 data4 dada5
no2 name2 dada6 data7 dada8
no3 name2 dada6 data7 dada8
no4 name3 data9 dada10 data11 dada12
no5 name4 data13 dada14
no6 name4 data13 dada14
no7 name4 data13 dada14
no8 name5 data15 dada16
no9 name6 data17 data18
no10 name6 data17 data18
root@ae02635267dc:/workspace/autohome/test/shell/awk# awk -F " " 'NR==FNR {a[$1]=$0;next} {print $1 " " a[$2]}' file2.txt file1.txt
no1 name1 data1 dada2 data3 data4 dada5
no2 name2 dada6 data7 dada8
no3 name2 dada6 data7 dada8
no4 name3 data9 dada10 data11 dada12
no5 name4 data13 dada14
no6 name4 data13 dada14
no7 name4 data13 dada14
no8 name5 data15 dada16
no9 name6 data17 data18
no10 name6 data17 data18
- 命令行分析
字段 | 意義 |
NR | 已經讀出的記錄數,就是行號,從1開始 |
FNR | 各文件分別計數的行號 |
NR==FNR | 表示讀第一個文件時的條件分支。 因爲行數相等 |
NR>FNR | 表示讀第二個文件時的條件分支 |
a | 存儲數據的字典型變量,所以字段值應該保持唯一,否則會被覆蓋; |
$0 | 當前行的所有內容 |
$1 | 當前行的第一列 |
a[$1]=$0 | 以第一列作爲key值,存儲當前行的內容$0 |
next | 忽略之後的語句,進行下一行的匹配 |
參考文獻: