Nếu thực hiện so sánh từng dòng một thì có thể chấp nhận được, thì phần sau đây sẽ cho biết dòng nào được sao chép trong tệp text
và số lần mỗi dòng xuất hiện:
sort text | uniq -c | grep -vE '^\s*1 '
Ví dụ
$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
3 alpha
2 beta
Sử dụng các công cụ unix thông thường, điều này có thể được mở rộng, giả sử định dạng kiểm tra đầu vào không quá phức tạp, để so sánh từng đoạn hoặc từng câu.
Tìm đoạn văn lặp đi lặp lại
Giả sử rằng tệp của chúng tôi text
chứa:
This is a paragraph.
This is another
paragraph
This is
a paragraph.
Last sentence.
Lệnh sau xác định các đoạn nào xuất hiện nhiều lần:
$ awk -v RS="" '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
2 This is a paragraph.
Điều này sử dụng awk
để chia văn bản thành các đoạn văn (được mô tả bằng các dòng trống), chuyển đổi các dòng mới thành khoảng trắng và sau đó chuyển đầu ra, một dòng trên mỗi đoạn, để sắp xếp và uniq để đếm các đoạn trùng lặp.
Ở trên đã được thử nghiệm với GNU awk
. Đối với các awk
phương thức khác , phương pháp xác định các dòng trống dưới dạng ranh giới đoạn (bản ghi) có thể khác nhau.
vimdiff
không làm cho bạn ở đây?