这很棘手,已经搜索了几个小时,我找不到任何有用的方法:(
我不在乎如何操作,powershell,批处理,npp ++或任何软件,但这是我想要做的:
我有一个文本文件text1.txt
,其中包含2888行。另一个文件text2.txt
的行数为3440行,但是在第二个文件中,已经比第一个文件中的行数精确了2888。
所以我要从text2.txt中“删除”我的text1.txt的2888行,只保留其余行“唯一”。
答案 0 :(得分:3)
这是两行的批处理;您可以使用findstr
比较两个文件。
findstr /V /G:text1.txt /L /X text2.txt >text3.txt
move /y text3.txt text2.txt
/G
从text1.txt获取搜索字符串
/V
返回所有除了那些字符串
/L
指示text1.txt中的行应按原义使用,而不是作为正则表达式使用(仅当行包含正则表达式使用的符号(例如[
和{{1})时,才需要这样做}或]
)
$
与实线匹配,因此“石头”不会被“一个”拾起
数据被存储在一个临时文件中,因为立即重定向到text2.txt会擦除该文件。创建临时文件后,/X
会覆盖旧文件,move
会执行此操作,而不会询问您是否确定要覆盖该文件。
答案 1 :(得分:1)
使用记事本++,您可以轻松地做到这一点。
您需要在记事本++上将text1.txt的数据复制到text2.txt。
合并后,您可以在搜索和替换对话框中使用此regex(> Notepad ++ 6):
^(.*?)$\s+?^(?=.*^\1$)
,什么也不要替换。这将使所有重复的行中文件中的最后一次出现。 您需要检查选项“正则表达式”和“。匹配换行符”:
答案 2 :(得分:1)
安装CudaText编辑器。通过菜单Plugins / AddonManager / Install在其中安装插件排序。
答案 3 :(得分:0)
缺少PowerShell解决方案,请尝试以下操作:
## Q:\Test\2018\06\26\SO51033576.ps1
$text1 = Get-Content `.\text1.txt
$text2 = Get-Content `.\text2.txt
(Compare-Object $text2 $text1 | Where-Object sideindicator -eq '<=').Inputobject|
Set-Content '.\new-text2.txt'