我需要通过匹配整行来输出file1.txt
中除file2.txt
中的所有行以外的所有行。
,例如file1.txt
:
Cats eat fish.
Mice eat cheese.
Eagles can fly.
Mountains are tall.
,例如file2.txt
:
Cats eat fish.
Birds can fly.
Trees are tall.
例如,输出:
Mice eat cheese.
Eagles fly.
Mountains are tall.
我使用了以下命令:
grep -v -x -f file1.txt file2.txt
这似乎有效,但是,当文件具有一定长度时,它通常会报告grep: memory exhausted
,因此我需要一种不会产生此内存问题的替代方法。
除了file1.txt
中的file2.txt
之外,如何输出{{1}}的行,而不会遇到内存问题?
答案 0 :(得分:3)
尝试:
grep -Fxvf file2.txt file1.txt
参考文献:find difference between two text files with one item per line
答案 1 :(得分:1)
尝试:
rm -f out.txt && while read -r line; do echo "checking if line $line exists in file2.txt"; if `grep -Fxq "$line" file2.txt`; then echo "$line exists in other for"; else echo "$line" >> out.txt; fi; done < file.txt
阐释:
这会删除输出文件(如果连续使用...),那么如果另一个存在则逐行检查。
作为bash文件,它更清楚:
rm out.txt
while read -r line
do
echo "checking if line $line exists in file2.txt"
if `grep -Fxq "$line" file2.txt`
then
echo "$line exists in other file"
else
echo "$line" >> out.txt
fi
done < file.txt
明显的概括:
while read -r line
do
echo "checking if line $line exists in $2"
if `grep -Fxq "$line" $2`
then
echo "$line exists in $2"
else
echo "$line" >> $3
fi
done < $1
第一个和第二个参数是文件,而outut文件是第三个参数