我有一个文件(Test1.txt
),其中包含电子邮件地址:
abc@gmail.com
joe@yahoo.com
另一个文件(Test2.txt
)中可能存在相同和一些额外的电子邮件地址,例如:
abc@gmail.com
gpg@gmail.com
joe@yahoo.com
我想删除Test2.txt
中abc@gmail.com
(joe@yahoo.com
,Test1.txt
)中的记录。 Test1.txt
和Test2.txt
之间共有的记录应从Test2.txt
中删除。我怎样才能做到这一点?
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed 's/[]^$.*&[]/\\&/g;s|.*|/^&$/d|' file1 | sed -f - file2
这将生成file1
的sed脚本,以对file2
进行处理。
答案 1 :(得分:1)
awk 'FNR==NR{a[$0];next}{if(!($0 in a)){print}' test1 test2
或简单地说:
awk 'FNR==NR{a[$0];next}!($0 in a)' test1 test2
答案 2 :(得分:0)
它不是那么简单,命令行不是SQL。一个简单的(虽然有点脏)解决方法:
cat Test1.txt Text2.txt Text2.txt|sort|uniq -c|awk '{if ($1==2) print $2;}'
这是正确的,假设电子邮件在每个文件中最多出现一次,假设不一定正确。
答案 3 :(得分:0)
这不是grep的任务吗?
grep -Fwvf test1.txt test2.txt
答案 4 :(得分:0)
得到公共线:
sort test1.txt test2.txt | uniq -d > common.txt
从test2.txt获取不是double的行(不是common.txt的内容)
sort common.txt test2.txt | uniq -u > newtest2.txt
答案 5 :(得分:0)
如果文件已排序,则可以使用join命令:
join -v 1 Test2.txt Test1.txt
join
对输入行,-v 1
删除与第二个文件匹配的行。
如果它们没有排序,您可以使用sort进行预处理:
sort Test1.txt > Text1.txt.sorted # and similarly for the second file
并在已排序的文件上运行连接。
答案 6 :(得分:0)
你能试试这个。
grep -xvf test1 test2 > test | cp test test2
按照你的要求工作,但我怀疑它是否有效!
答案 7 :(得分:0)
你能试试这个:
grep -xvf test1 test2 > test|mv test test2
按照您的要求工作,但怀疑它是否有效!