Từ thiết bị đầu cuối UNIX, chúng ta có thể sử dụng
sort file1 file2 | uniq -d
4 để tìm sự khác biệt giữa hai tệp. Có một lệnh tương tự để hiển thị sự tương đồng trên 2 tệp không? [Nhiều đường ống cho phép nếu cần thiết.Mỗi tệp chứa một dòng với một câu chuỗi; Chúng được sắp xếp và trùng lặp các dòng được loại bỏ bằng
sort file1 file2 | uniq -d
5.sort file1 file2 | uniq -d
6: //pastebin.com/tarcegvnsort file1 file2 | uniq -d
7: //pastebin.com/2fxemrhqVà đầu ra sẽ xuất ra các dòng xuất hiện trong cả hai tệp.
sort file1 file2 | uniq -d
8: //pastebin.com/fnjxfshsTôi có thể sử dụng Python để làm điều đó như vậy nhưng tôi nghĩ rằng đó là một chút quá nhiều để đưa vào thiết bị đầu cuối:
x = set[[i.strip[] for i in open['wn-rb.dic']]]
y = set[[i.strip[] for i in open['wn-s.dic']]]
z = x.intersection[y]
outfile = open['reverse-diff.out']
for i in z:
print>>outfile, i
hỏi ngày 18 tháng 3 năm 2013 lúc 5:25Mar 18, 2013 at 5:25
Alvasalvasalvas
109K101 Huy hiệu vàng422 Huy hiệu bạc697 Huy hiệu Đồng101 gold badges422 silver badges697 bronze badges
8
Nếu bạn muốn có được một danh sách các dòng lặp đi lặp lại mà không cần dùng đến AWK, bạn có thể sử dụng cờ
sort file1 file2 | uniq -d
9 cho uniq:sort file1 file2 | uniq -d
Đã trả lời ngày 3 tháng 3 năm 2014 lúc 20:27Mar 3, 2014 at 20:27
user35147863user35147863user35147863
2.4752 Huy hiệu vàng22 Huy hiệu bạc25 Huy hiệu Đồng2 gold badges22 silver badges25 bronze badges
1
Như @tjameson đã đề cập, nó có thể được giải quyết trong một chủ đề khác. Chỉ muốn đăng một giải pháp khác:
sort -m *.words | uniq -d >dupes.txt
0Tham khảo Hướng dẫn AWK để có được một số điều cơ bản AWK, khi giá trị mẫu của một dòng đúng là dòng này sẽ được in
DUP [$ 0] là một bảng băm trong đó mỗi khóa là mỗi dòng của đầu vào, giá trị ban đầu là 0 và tăng sau khi dòng này xảy ra, khi nó xảy ra lại, giá trị phải là 1, do đó
1 là đúng. Sau đó, dòng này được in.sort -m *.words | uniq -d >dupes.txt
Lưu ý rằng điều này chỉ hoạt động khi không có bản sao trong một trong hai tệp, như đã được chỉ định trong câu hỏi.
Đã trả lời ngày 18 tháng 3 năm 2013 lúc 5:34Mar 18, 2013 at 5:34
2
Vì tất cả các tệp đầu vào đã được sắp xếp, chúng tôi có thể bỏ qua bước sắp xếp thực tế và chỉ sử dụng
sort -m *.words | uniq -d >dupes.txt
2 để hợp nhất các tệp lại với nhau.Trên một số hệ thống Unix [theo hiểu biết của tôi chỉ Linux], nó có thể đủ để làm
sort -m *.words | uniq -d >dupes.txt
Để có được các dòng trùng lặp được ghi vào tệp
sort -m *.words | uniq -d >dupes.txt
3.Để tìm các tệp những dòng này đến từ, sau đó bạn có thể làm
grep -Fx -f dupes.txt *.words
Điều này sẽ hướng dẫn
sort -m *.words | uniq -d >dupes.txt
4 xử lý các dòng trong sort -m *.words | uniq -d >dupes.txt
3 [sort -m *.words | uniq -d >dupes.txt
6] dưới dạng các mẫu chuỗi cố định [sort -m *.words | uniq -d >dupes.txt
7]. sort -m *.words | uniq -d >dupes.txt
4 cũng sẽ yêu cầu toàn bộ dòng hoàn hảo từ đầu đến cuối [sort -m *.words | uniq -d >dupes.txt
9]. Nó sẽ in tên tệp và dòng vào thiết bị đầu cuối.Unices không linux [hoặc thậm chí nhiều tệp hơn]
Trên một số hệ thống UNIX, tên tệp 30000 sẽ mở rộng thành một chuỗi quá dài để chuyển sang một tiện ích duy nhất [có nghĩa là
grep -Fx -f dupes.txt *.words
0 sẽ thất bại với grep -Fx -f dupes.txt *.words
1, nó thực hiện trên hệ thống OpenBSD của tôi]. Ngay cả Linux cũng sẽ phàn nàn về điều này nếu số lượng tệp lớn hơn nhiều.Tìm kiếm các bản sao
Điều này có nghĩa là trong trường hợp chung [điều này cũng sẽ hoạt động với nhiều hơn chỉ 30000 tệp], người ta phải "chunk" việc sắp xếp:
rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
Ngoài ra, tạo
grep -Fx -f dupes.txt *.words
2 mà không cần grep -Fx -f dupes.txt *.words
3:rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
Điều này sẽ tìm thấy tất cả các tệp trong thư mục hiện tại [hoặc bên dưới] có tên khớp với
grep -Fx -f dupes.txt *.words
4. Đối với một đoạn có kích thước phù hợp của các tên này tại một thời điểm, kích thước được xác định bởi ________ 33/________ 36, nó hợp nhất chúng lại với nhau thành tệp grep -Fx -f dupes.txt *.words
2 được sắp xếp. Nếu grep -Fx -f dupes.txt *.words
2 đã tồn tại [với tất cả trừ phần đầu tiên], tệp này cũng được hợp nhất với các tệp khác trong đoạn hiện tại. Tùy thuộc vào độ dài của tên tệp của bạn và độ dài tối đa cho phép của một dòng lệnh, điều này có thể yêu cầu nhiều hơn hoặc nhiều hơn 10 lần chạy riêng lẻ của tập lệnh nội bộ [____ 36/________ 33 sẽ tự động thực hiện việc này].Tập lệnh "nội bộ"
rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
1,if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi
Sử dụng
rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
2 để xuất vào grep -Fx -f dupes.txt *.words
2 [điều này sẽ không ghi đè lên grep -Fx -f dupes.txt *.words
2 ngay cả khi đây cũng là một đầu vào cho rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
5] và rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
6 để thực hiện hợp nhất. Trong cả hai nhánh, rm -f tmpfile
find . -type f -name '*.words' -print0 |
xargs -0 sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh
7 sẽ mở rộng sang danh sách các tên tệp được trích dẫn riêng lẻ được chuyển cho tập lệnh từ grep -Fx -f dupes.txt *.words
6 hoặc grep -Fx -f dupes.txt *.words
3.Sau đó, chỉ cần chạy
rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
0 trên grep -Fx -f dupes.txt *.words
2 để có được tất cả các dòng được nhân đôi:uniq -d tmpfile >dupes.txt
Nếu bạn thích nguyên tắc "khô" ["đừng lặp lại chính mình"], bạn có thể viết tập lệnh nội bộ là
if [ -f tmpfile ]; then
t=tmpfile
else
t=/dev/null
fi
sort -o tmpfile -m "$t" "$@"
hoặc
t=tmpfile
[ ! -f "$t" ] && t=/dev/null
sort -o tmpfile -m "$t" "$@"
Họ đến từ đâu vậy?
Vì những lý do tương tự như trên, chúng tôi không thể sử dụng
rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
2 để tìm những bản sao này đến từ đâu, vì vậy thay vào đó chúng tôi sử dụng lại grep -Fx -f dupes.txt *.words
6:sort file1 file2 | uniq -d
0Vì không có quá trình xử lý "phức tạp" nào được thực hiện, chúng tôi có thể gọi
sort -m *.words | uniq -d >dupes.txt
4 trực tiếp từ rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
5. Tùy chọn rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
5 có lệnh tiện ích và sẽ đặt các tên được tìm thấy trong rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
7. Với rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
8 ở cuối, grep -Fx -f dupes.txt *.words
6 sẽ đặt nhiều đối số thay cho rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
7 khi vỏ hiện tại hỗ trợ trong mỗi lần gọi tiện ích.Hoàn toàn chính xác, người ta có thể muốn sử dụng
sort file1 file2 | uniq -d
1hoặc
sort file1 file2 | uniq -d
2Họ đến từ đâu vậy?
Vì những lý do tương tự như trên, chúng tôi không thể sử dụng
rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
2 để tìm những bản sao này đến từ đâu, vì vậy thay vào đó chúng tôi sử dụng lại grep -Fx -f dupes.txt *.words
6:Vì không có quá trình xử lý "phức tạp" nào được thực hiện, chúng tôi có thể gọi
sort -m *.words | uniq -d >dupes.txt
4 trực tiếp từ rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
5. Tùy chọn rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
5 có lệnh tiện ích và sẽ đặt các tên được tìm thấy trong rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
7. Với rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
8 ở cuối, grep -Fx -f dupes.txt *.words
6 sẽ đặt nhiều đối số thay cho rm -f tmpfile
find . -type f -name '*.words' -exec sh -c '
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi' sh {} +
7 khi vỏ hiện tại hỗ trợ trong mỗi lần gọi tiện ích.Hoàn toàn chính xác, người ta có thể muốn sử dụng
Để chắc chắn rằng tên tệp luôn được bao gồm trong đầu ra từ sort -m *.words | uniq -d >dupes.txt
4.
sort -m *.words | uniq -d >dupes.txt
sort file1 file2 | uniq -d
3Biến thể đầu tiên sử dụng
if [ -f tmpfile ]; then
sort -o tmpfile -m tmpfile "$@"
else
sort -o tmpfile -m "$@"
fi
2 để luôn xuất ra các tên tệp khớp. Biến thể cuối cùng sử dụng thực tế là sort -m *.words | uniq -d >dupes.txt
4 sẽ bao gồm tên của tệp phù hợp nếu có nhiều hơn một tệp được đưa ra trên dòng lệnh.Điều này quan trọng kể từ phần cuối cùng của tên tệp được gửi đến
sort -m *.words | uniq -d >dupes.txt
4 từ grep -Fx -f dupes.txt *.words
6 thực sự chỉ có thể chứa một tên tệp, trong trường hợp đó sort -m *.words | uniq -d >dupes.txt
4 sẽ không đề cập đến nó trong kết quả của nó.Tài liệu thưởng:
Phân tích lệnh ____ 36+________ 33+________ 41:
uniq -d tmpfile >dupes.txt
0 chỉ đơn giản là tạo một danh sách các tên đường dẫn từ thư mục hiện tại [hoặc bên dưới] trong đó mỗi tên đường dẫn là của một tệp thông thường [uniq -d tmpfile >dupes.txt
1] và có thành phần tên tệp ở cuối khớp với grep -Fx -f dupes.txt *.words
4. Nếu chỉ tìm kiếm thư mục hiện tại, người ta có thể thêm uniq -d tmpfile >dupes.txt
3 sau uniq -d tmpfile >dupes.txt
4, trước uniq -d tmpfile >dupes.txt
1.uniq -d tmpfile >dupes.txt
6 sẽ đảm bảo rằng tất cả các tên đường dẫn được tìm thấy được xuất ra với ký tự uniq -d tmpfile >dupes.txt
7 [uniq -d tmpfile >dupes.txt
8] là dấu phân cách. Đây là một ký tự không hợp lệ trong đường dẫn Unix và nó cho phép chúng tôi xử lý các tên đường dẫn ngay cả khi chúng chứa các ký tự mới [hoặc những thứ kỳ lạ khác].