比较2个文件并删除file2中与file1中找到的值匹配的任何行

use*_*BSD 2 python bash awk grep sed

我有两个文件.我试图删除文件2中的任何行,当它们匹配file1中找到的值.一个文件有这样的列表:

文件1

ZNI008
ZNI009
ZNI010
ZNI011
ZNI012
Run Code Online (Sandbox Code Playgroud)

...超过19463行

第二个文件包含与第一个文件中列出的项匹配的行:File2

copy /Y \\server\foldername\version\20050001_ZNI008_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI010_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI012_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI009_162635.xml \\server\foldername\version\folder\
Run Code Online (Sandbox Code Playgroud)

...继续列出直到第51360行

到目前为止我尝试过的:

grep -v -i -f file1.txt file2.txt > f3.txt
Run Code Online (Sandbox Code Playgroud)

不会产生任何输出f3.txt或删除任何行.我通过跑步验证

wc -l file2.txt
Run Code Online (Sandbox Code Playgroud)

结果是

51360 file2.txt
Run Code Online (Sandbox Code Playgroud)

我相信原因是没有确切的匹配.当我运行以下内容时,它什么也没显示

comm -1 -2 file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

运行

( tr '\0' '\n' < file1.txt; tr '\0' '\n' < file2.txt ) | sort | uniq -c | egrep -v '^ +1'
Run Code Online (Sandbox Code Playgroud)

只显示一场比赛,即使我可以清楚地看到有多场比赛.

或者将所有数据放入一个文件并运行以下命令:

grep -Ev "$(cat file1.txt)" 1>LinesRemoved.log
Run Code Online (Sandbox Code Playgroud)

说论证有太多的线要处理.

我需要从file2中删除与file1中的项匹配的行.

我也在python中尝试这个:`

    #!/usr/bin/python
s = set()

# load each line of file1 into memory as elements of a set, 's'
f1 = open("file1.txt", "r")
for line in f1:
    s.add(line.strip())
f1.close()

# open file2 and split each line on "_" separator,
# second field contains the value ZNIxxx
f2 = open("file2.txt", "r")
for line in f2:
    if line[0:4] == "copy":
        fields = line.split("_")
        # check if the field exists in the set 's'
        if fields[1] not in s:
            match = line
        else:
            match = 0
    else:
        if match:
            print match, line,
Run Code Online (Sandbox Code Playgroud)

`

它运行不正常..因为我正在获取'Traceback(最近的呼叫最后一次):文件"./test.py",第14行,在?如果字段[1]不在s中:IndexError:列表索引超出范围'

byr*_*sos 7

关于什么:

grep -F -v -f file1 file2 > file3
Run Code Online (Sandbox Code Playgroud)