BASH删除包含某些字符的行

BASH删除包含某些字符的行,bash,sed,character,lines,Bash,Sed,Character,Lines,我有一个输出如下的文件: server1 server2 server1_server2 server3 server4 server5 server6 server5_server6 server7 server8 server_prod server_test ..... 我正在搜索删除已包含在带有的行中的行的方法。输出应为: server1_server2 server3 server4 server5_server6 server7 server8 server_prod server

我有一个输出如下的文件:

server1
server2
server1_server2
server3
server4
server5
server6
server5_server6
server7
server8
server_prod
server_test
.....
我正在搜索删除已包含在带有
的行中的行的方法。输出应为:

server1_server2
server3
server4
server5_server6
server7
server8
server_prod
server_test

**请注意,最后两个服务器有“uques”,但它们是唯一的…因此我想保留它们。

此awk one liner可以帮助您:

awk -F'_' 'NR==FNR{if(NF>1)for(i=1;i<=NF;i++)a[$i]=1;next} !a[$0]' file file
server1_server2
server3
server4
server5_server6
server7
server8

awk-F''u''NR==FNR{if(NF>1)for(i=1;i是否所有对都确保不包含任何重复项?例如,您希望从“server1,server2\u server3,server2\u server4”中得到什么?是的,这些对不包含重复项。它们只是串联的名称。更复杂的是,我将服务器名称与“server\u prod01”类似.但我不想删除它,因为它不是重复的。这看起来很像一个家庭作业问题。到目前为止,你尝试了什么?你还需要准确地解释你想要实现什么。现在还不清楚你正在想象什么算法将该列表转换为第二个列表。不要让我们猜测;告诉我们。嗨,我认为这是可行的!但是我无法理解代码的逻辑。1-您将delimeter设置为“\u2-如果行中有多个字段,则计数3-?我有唯一的服务器名称,如“server\u prod3”,代码没有删除它(我不想删除该服务器,因为它是唯一的)我不明白你的意思。如果你举了一个例子,请涵盖所有情况。@Deesheyy你的脚本工作正常。但是如果我有唯一的带有“?”的服务器名,会发生什么情况。我想保留它们。另一个问题。“!a[$0]是什么意思?”?@Deeshey my codes不区分
\uuuuu
是服务器名的一部分或服务器名的分隔符。
!如果
a[$0]==0
NR=FNR是一个常用的awk习惯用法,用来区分第一个文件和第二个或以后的文件(在这种情况下,有两个相同的文件),则表示打印行.因此,关联数组a由第一个文件填充,其中包含由下划线分隔的字段。第二个文件与!a[$0]匹配,这意味着如果该行不在第一次构建的关联数组中,则打印该行。