1. 制作文件file1, file2, file3, file4, file5篮撑;"\t"分隔符树肃;觀察文件格式特點
cat > file1
aaa 001 A
bbb 002 B
ccc 003 C
ddd 004 D
eee 005 E
cat > file2
aaa 001 A
bbb 002 B
cat > file3
aaa
bbb
ccc
ddd
cat file4
aaa 001 100
bbb 002 90
ccc 003 80
ddd 004 70
eee 005 60
cat file5
A aaa 001 100
B bbb 002 90
C ccc 003 80
D ddd 004 70
E eee 005 60
2. awk是按行讀入文件內(nèi)容的遍略,因此awk按行(字段)比較兩個文件的相同行或者不同行
# 1.同時在file1和file2中存在的行
# 邏輯:當文件1時舱卡,將文件1按行寫入數(shù)組宦赠;當文件2時亦镶,按行判斷文件2是否在數(shù)組中,如果在袱瓮,打印該行并輸出到common文件缤骨。
awk 'BEGIN{FS=OFS="\t"} {if(NR==FNR){array[$0]} else{if($0 in array) {print $0}}}' file1 file2
awk 'BEGIN{FS=OFS="\t"} {if(ARGIND==1){array[$0]} else{if($0 in array) {print $0}}}' file1 file2
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$0]} ARGIND==2{if($0 in array) {print $0}}' file1 file2
# 2.只在一個文件中有的行
# 邏輯:當文件1時,將文件1按行寫入數(shù)組尺借;當文件2時绊起,按行判斷文件2是否在數(shù)組中,如果在燎斩,刪除數(shù)組中該條記錄虱歪;打印數(shù)組中的值。
awk 'BEGIN{FS=OFS="\t"} {if(NR==FNR){array[$0]} else{if($0 in array) {delete array[$0]}}} END{for(i in array) {print i}}' file1 file2
awk 'BEGIN{FS=OFS="\t"} {if(ARGIND==1){array[$0]} else{if($0 in array) {delete array[$0]}}} END{for(i in array) {print i}}' file1 file2
# 3.比較兩個文件一列相同栅表,打印目標行數(shù)據(jù),注意構建數(shù)組的語法形式多樣"++";"next"
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1]} ARGIND==2{if($1 in array){print $0}}' file3 file1
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1]++} ARGIND==2{if($1 in array){print $0}}' file3 file1
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1];next} ARGIND==2{if($1 in array){print $0}}' file3 file1
# 4.比較兩個文件(列數(shù)列號相同)笋鄙,指定多列相同時,打印目標數(shù)據(jù)
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1,$2];next} ($1,$2) in array' file1 file4
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{a[$1]; b[$2]; next} $1 in a && $2 in b' file1 file4
# 5.比較兩個文件(列數(shù)列號不相同)怪瓶,指定多列相同時萧落,打印目標數(shù)據(jù)
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{a[$1]; b[$2]; next} $2 in a && $3 in b' file1 file5
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1,$2];next} ($2,$3) in array' file1 file5
最后編輯于 :
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者