我在 Windows WSL 中使用 grep 命令,但它似乎不准确。
该命令是从文件2中删除文件1中匹配的行,并在文件3(文本文件)中输出这些行
grep -v -f file2.txt file1.txt >> file3.txt
但是,输出结果加起来并不等于总行数,例如,file2 可能有 100 行,file1 可能有 50 行,而输出 file3 可能有 30 行。
但我的规模更大。文件 2 有 430,000 行,文件 1 有 30,000 行,但输出有 370,000 行。另外要知道,文件 1 中的每一行都与文件 2 中的匹配项随机混在一起,所以我必须使用 grep 来删除它们。此外,文件 1 和文件 2 中都没有重复的行。
答案1
>>
表示“附加到文件”,而>
表示“覆盖文件”
,但作为示例,我生成了 2 个随机 UUID 的文件,文件 2 有 100 个唯一行,文件 1 有 50 个唯一行,再加上文件 2 中的所有行,以完全随机的顺序进行打乱
$ wc -l file2.txt file1.txt
100 file2.txt
150 file1.txt
然后我执行你的命令
$ grep -v -f file2.txt file1.txt >> file3.txt
$ wc -l file3.txt
50 file3.txt
正如预期的那样,但现在看看如果我再次运行它会发生什么:
$ grep -v -f file2.txt file1.txt >> file3.txt
$ wc -l file3.txt
100 file3.txt
你所有的问题似乎都是因为你误解了 linux shell 重定向操作数