Những gì bạn muốn làm là trên bất kỳ công cụ dòng lệnh nào, nó được thực hiện bởi các chương trình có khả năng tìm kiếm toàn văn bản. Một cái gì đó ít hơn nhiều có thể đạt được bằng cách sử dụng awk:
$ cat fts.awk
{ gsub( /[[:space:],."!?]+/, " ") }
FILENAME == "A" {
A[++cntA] = $0
next
}
FILENAME == "B" {
for ( nrA=1; nrA<=cntA; ++nrA) {
for ( first=1; first<=NF; ++first) {
for ( last=first; last<=NF; ++last) {
lookfor = (last == first) ? $first : lookfor " " $last
#print "lookfor=", lookfor
#print "<", A[nrA]
if ( index(A[nrA], lookfor)) {
#print "FOUND>", found, nrA, NR
found = lookfor
} else if (found) {
printf "Phrase \"%s\" found in File A line %d, file B line %d.\n",\
found, nrA, FNR
found = ""
break
}
}
}
}
}
Có thể được gọi là:
$ awk -f fts.awk A B
Phrase "bananas in space" found in File A line 1, file B line 1.
Phrase "in space" found in File A line 1, file B line 1.
Phrase "space" found in File A line 1, file B line 1.
Như bạn có thể thấy, mã đã trở nên phức tạp, mặc dù hầu như không có bất kỳ danh sách tính năng nào của bạn, nó thậm chí không có bộ nhớ để loại bỏ hiển thị các hàm con.