【发布时间】:2020-12-05 14:52:43
【问题描述】:
我有一个文件1
NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(),.S(),.Z(n9)); |4
CKLHQD16BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n9),.Q(n10)); |5
LHCSNQD1BWP210H6P51CNODSVT-(.CDN(n10),.D(),.E(1),.SDN(),.Q(n11)); |6
OAI21D8BWP210H6P51CNODSVT-(.A1(n11),.A2(),.B(),.ZN(n12)); |9
DCCKND16BWP210H6P51CNODSVT-(.I(n12),.ZN(n13)); |10
INVSKFD14BWP210H6P51CNODSVT-(.I(n13),.ZN(n14)); |11
NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(n1),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(n2),.S(),.Z(n9)); |4
我需要在 file1 中找到匹配的行,即第一个字段。字段由- 分隔,如果找到匹配,则删除第一个匹配行。
我想输出为
CKLHQD16BWP210H6P51CNODSVT-(.CPN(#),.E(1),.TE(n9),.Q(n10)); |5
LHCSNQD1BWP210H6P51CNODSVT-(.CDN(n10),.D(),.E(1),.SDN(),.Q(n11)); |6
OAI21D8BWP210H6P51CNODSVT-(.A1(n11),.A2(),.B(),.ZN(n12)); |9
DCCKND16BWP210H6P51CNODSVT-(.I(n12),.ZN(n13)); |10
INVSKFD14BWP210H6P51CNODSVT-(.I(n13),.ZN(n14)); |11
NR2SKRD12BWP210H6P51CNODSVT-(.A1(n7),.A2(n1),.ZN(n8)); |2
MUX2D2BWP210H6P51CNODSVT-(.I0(n8),.I1(n2),.S(),.Z(n9)); |4
这里NR2SKRD12BWP210H6P51CNODSVT 和MUX2D2BWP210H6P51CNODSVT 有相同的 1 美元。所以删除他们的第一条匹配线。
我试过代码
awk -F'-' 'FNR==NR{a[$1];next} !(($1) in a)' file1
但是这段代码是在两个文件之间查找匹配和删除行。如何找到单个文件的匹配和删除。 *仅删除第一条匹配行。保持第二,第三,第四等重复。
【问题讨论】:
-
处理一个文件时,
FNR==NR背后的逻辑是什么? -
删除第一次出现。仅如果有第三次第四次重复,则保留它们。 @rowboat