我需要知道如何删除重复的行,但是要排除一个字段而不必匹配(在这种情况下为field2)。 AWK是首选。
输入:
LSP1 1000 NODE1 NODE2 NODE3
LSP1 2000 NODE1 NODE2 NODE3
LSP2 3000 NODE1 NODE2
LSP2 2500 NODE3
LSP3 4000 NODE1 NODE2 NODE3 NODE4
LSP3 4000 NODE1 NODE2
输出:
LSP2 3000 NODE1 NODE2
LSP2 2500 NODE3
LSP3 4000 NODE1 NODE2 NODE3 NODE4
LSP3 4000 NODE1 NODE2
答案 0 :(得分:1)
awk
辅助的uniq
解决方案。 uniq
可以跳过字段,但必须从头开始;帮助程序awk
脚本交换前两个字段;之后打电话回以相同的顺序。
$ function s12() { awk '{t=$1;$1=$2;$2=t}1' </dev/stdin; }; s12 <file | uniq -uf1 | s12
LSP2 3000 NODE1 NODE2
LSP2 2500 NODE3
LSP3 4000 NODE1 NODE2 NODE3 NODE4
LSP3 4000 NODE1 NODE2
答案 1 :(得分:1)
it('using await in each()', async function(){
await browser.get("https://www.npmjs.com/");
element.all(by.css('nav > ul >li >a')).each(async function(item){
var txt = await item.getText();
console.log(txt);
})
})
这个想法是从awk '{t=$0; $2=""; a[$0]=t; b[$0]++; c[NR]=$0}
END {for (i in c) if (b[c[i]]==1) print a[c[i]]}'
中删除第二个字段并将其存储在$0
中。然后,我们建立原始行的哈希t
,哈希a
,在其中我们计算没有第二个字段的行的出现,以及行号哈希值b
到无行-field-两个值,以便我们可以重现原始顺序。
最后,对于每个行号(c
),我们检查文件(for (i in c)
)中该行(第二个字段已删除)发生了多少次。如果恰好是一次,那么我们将打印原始值(b[c[i]]
)。
答案 2 :(得分:-1)
如果您不在乎输出顺序:
$ cat tst.awk
{
orig0 = $0
$2 = ""
key = $0
vals[key] = orig0
cnt[key]++
}
END {
for ( key in cnt ) {
if ( cnt[key] == 1 ) {
print vals[key]
}
}
}
$ awk -f tst.awk file
LSP2 2500 NODE3
LSP2 3000 NODE1 NODE2
LSP3 4000 NODE1 NODE2
LSP3 4000 NODE1 NODE2 NODE3 NODE4
如果您这样做:
$ awk -f tst.awk file
$ cat tst.awk
{
orig0 = $0
$2 = ""
key = $0
}
++cnt[key] == 1 {
keys[++numKeys] = key
vals[key] = orig0
}
END {
for ( keyNr=1; keyNr<=numKeys; keyNr++ ) {
key = keys[keyNr]
if ( cnt[key] == 1 ) {
print vals[key]
}
}
}
$ awk -f tst.awk file
LSP2 3000 NODE1 NODE2
LSP2 2500 NODE3
LSP3 4000 NODE1 NODE2 NODE3 NODE4
LSP3 4000 NODE1 NODE2