我有两个文件,我需要打印第一个文件中不在第二个文件中的单词(不是完整的行)。我已经尝试了wdiff
但它打印完整的行并没有用。
档案样本:
وكان مكنيل وقتها رئيس رابطة مؤرخي أمريكا ـ
كما فهمت - من شاهد الحادثة. ثم يصف كيف قدم
مكنيل الرجلين الخصمين, فكانت له صرامته, إذ
حدد عشرين دقيقة فقط لكل منهما أن يقدم رأيه
وحجته, ثم وقت للرد, ثم يجيبان عن أسئلة قليلة
من القاعة, والمناقشة في وقت محدد.
答案 0 :(得分:4)
制作两个包含每个单词的文件,并对它们进行排序。然后使用comm
:
$ cat fileA
ﻮﻛﺎﻧ ﻢﻜﻨﻴﻟ ﻮﻘﺘﻫﺍ ﺮﺌﻴﺳ ﺭﺎﺒﻃﺓ ﻡﺅﺮﺨﻳ ﺄﻣﺮﻴﻛﺍ ـ
ﻚﻣﺍ ﻒﻬﻤﺗ - ﻢﻧ ﺵﺎﻫﺩ ﺎﻠﺣﺍﺪﺛﺓ. ﺚﻣ ﻲﺼﻓ ﻚﻴﻓ ﻕﺪﻣ
$ cat fileB
ﻮﻘﺘﻫﺍ ﺮﺌﻴﺳ ﺭﺎﺒﻃﺓ ﺄﻣﺮﻴﻛﺍ ـ
ﻚﻣﺍ ﻒﻬﻤﺗ - ﻢﻧ ﺵﺎﻫﺩ ﻲﺼﻓ ﻚﻴﻓ ﻕﺪﻣ
$ tr ' ' '\n' < fileA | sort > fileA-sorted
$ tr ' ' '\n' < fileB | sort > fileB-sorted
$ comm -23 fileA-sorted fileB-sorted
ﺎﻠﺣﺍﺪﺛﺓ.
ﺚﻣ
ﻢﻜﻨﻴﻟ
ﻡﺅﺮﺨﻳ
ﻮﻛﺎﻧ
$
这也可以用bash写在一行:
comm -23 <(tr ' ' '\n' < fileA | sort) <(tr ' ' '\n' < fileB | sort)
答案 1 :(得分:1)
这不是一个答案,但评论太久不能发表评论。对不起 - 在这种情况下我还不知道礼仪,所以如果有更好的方法,请告诉我。
我认为其他答案中给出的方法都很有趣,但担心grep
版本需要进行m * n
比较,其中m
和n
是数字每个文件中的单词分别。
我在OSX上运行bash
并运行以下冒烟测试进行比较:
从我的词典中随机选择10K个单词:
gsort -R /usr/share/dict/words | head -n 10000 > words1
gsort -R /usr/share/dict/words | head -n 10000 > words2
比较每个解决方案的运行时间:
使用comm
:
time comm -23 <(tr ' ' '\n' < words1 | sort) <(tr ' ' '\n' < words2 | sort)
结果:
real 0m0.143s
user 0m0.225s
sys 0m0.018s
使用grep
:
time grep -wf <(tr ' ' '\n' < words1) <(tr ' ' '\n' < words2)
结果:
real 1m25.988s
user 1m25.925s
sys 0m0.063s
我不确定内存复杂性。我对这种分析的任何批评感兴趣,或者对如何评估哪种解决方案更好的评论感兴趣?
答案 2 :(得分:0)
您可以使用grep
:
grep -wf <(tr ' ' '\n' < file1) <(tr ' ' '\n' < file2)