AWK-删除重复行-不必匹配字段2

时间:2018-08-10 21:29:46

标签: awk

我需要知道如何删除重复的行,但是要排除一个字段而不必匹配(在这种情况下为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

3 个答案:

答案 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