از فرمان comm(1) استفاده کنید:
# Bash # file2 و file1 فصل مشترک # (یعنی فقط سطرهایی که در هر دو فایل وجود دارد) comm -12 <(sort file1) <(sort file2) # file2 از file1 تفریق # (وجود دارد file2 یعنی سطرهایی که منحصراً در) comm -13 <(sort file1) <(sort file2)
برای تفصیل بیشتر صفحات man دستور comm را بخوانید. آنها که آن بالا میبینید جایگزینی پردازشها هستند.
اگر بنا به دلایلی سیستم شما فاقد برنامه مرکزی comm است، میتوانید از این روشهای دیگر استفاده کنید. (در حقیقت، شما از هیچ کدام اینها واقعاً نباید استفاده کنید. این روشها توسط افرادی نوشته شدهاند که هنوز چیزی در باره comm نمیدانستند. اما پیشنهادات محرمانه برای دوستداران کُندی!)
# file2 و file1 فصل مشترک grep -xF -f file1 file2 # file2 از file1 تفریق grep -vxF -f file1 file2
این کُد با هر grep سازگار با POSIX کار خواهد کرد، در سیستمهای قدیمیتر ممکن است به جای grep -F نیاز به استفاده از fgrep داشته باشید.
# file2 و file1 فصل مشترک sort file1 file2 | uniq -d # (با این فرض که فایلها محتویات تکراری ندارند) # file1-file2 (تفریق) sort file1 file2 file2 | uniq -u # file2 - file1 (تفریق به همان طریق اما برعکس) sort file1 file2 file1 | uniq -u
sort file1 file1 file2 | uniq -c | awk '{ if ($1 == 2) { $1 = ""; print; } }'
# .نیستند را چاپ میکند file2 هستند و در file1 فقط سطرهایی که در # .با جابه جایی شناسهها نتیجه معکوس خواهید گرفت awk 'NR==FNR{a[$0];next} !($0 in a)' file2 file1 # .سطرهایی که در هر دو فایل هستند چاپ میشود، ترتیب شناسهها مهم نیست awk 'NR==FNR{a[$0];next} $0 in a' file1 file2
برای یک شرح در باره چگونگی کارکرد این مورد، مقایسه دو فایل توسط awk را ببینید.
پرسش و پاسخ 36 (آخرین ویرایش 2010-12-28 17:17:57 توسط GreyCat)