行完全相同
- 输出两个文件中相同的行 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 | 忽略之后的语句,进行下一行的匹配 |
参考文献: