gpt4 book ai didi

python - 比较 2 个文件,当它们与 file1 中找到的值匹配时,删除 file2 中的任何行

转载 作者:行者123 更新时间:2023-11-28 20:27:03 24 4
gpt4 key购买 nike

我有两个文件。我试图删除 file2 中与 file1 中找到的值匹配的任何行。一个文件有如下列表:

文件1

ZNI008
ZNI009
ZNI010
ZNI011
ZNI012

...超过 19463 行

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

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\

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

到目前为止我尝试了什么:

grep -v -i -f file1.txt file2.txt > f3.txt

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

wc -l file2.txt

结果是

51360 file2.txt

我认为原因是没有完全匹配。当我运行以下命令时,它什么也没显示

comm -1 -2 file1.txt file2.txt

运行

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

只显示一场比赛,尽管我可以清楚地看到不止一场比赛。

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

grep -Ev "$(cat file1.txt)" 1>LinesRemoved.log

说参数有太多行需要处理。

我需要从 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,

`

它不太好用..正如我得到的'追溯(最近一次通话最后一次): 文件“./test.py”,第 14 行,在 ? 如果 fields[1] 不在 s 中:IndexError: 列表索引超出范围'

最佳答案

关于:

grep -F -v -f file1 file2 > file3

关于python - 比较 2 个文件,当它们与 file1 中找到的值匹配时,删除 file2 中的任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com