gpt4 book ai didi

linux - 使用另一个文件的行号从文本文件中删除行

转载 作者:IT王子 更新时间:2023-10-29 01:04:15 24 4
gpt4 key购买 nike

我有一个包含大量行号列表的文本文件,我必须将其从另一个主文件中删除。这是我的数据的样子

行.txt

1
2
4
5
22
36
400
...

documents.txt

string1
string2
string3
...

如果我有一个简短的行号列表,我就可以轻松使用

sed -i '1d,4d,5d' documents.txt

但是我必须删除很多行号。此外,我可以使用 bash/perl 脚本将行号存储在数组中,并回显不在数组中的行。但我想知道是否有内置命令可以做到这一点。

任何帮助将不胜感激。

最佳答案

awk oneliner 应该适合你,见下面的测试:

kent$  head lines.txt doc.txt 
==> lines.txt <==
1
3
5
7

==> doc.txt <==
a
b
c
d
e
f
g
h

kent$ awk 'NR==FNR{l[$0];next;} !(FNR in l)' lines.txt doc.txt
b
d
f
h

按照 Levon 的建议,我添加一些解释:

awk                     # the awk command
'NR==FNR{l[$0];next;} # process the first file(lines.txt),save each line(the line# you want to delete) into an array "l"

!(FNR in l)' #now come to the 2nd file(doc.txt), if line number not in "l",print the line out
lines.txt # 1st argument, file:lines.txt
docs.txt # 2nd argument, file:doc.txt

关于linux - 使用另一个文件的行号从文本文件中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369672/

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