当使用unix命令存在'u v`行时,如何从文件中删除'v u`行

时间:2016-03-02 10:32:59

标签: shell unix awk graph

我有以下测试数据:

a b
a c
b a
b c
b d
c a
c b
c d
d b
d c

我希望在使用unix命令存在行v u时删除行u v。例如,我想获得:

a b
a c
b c
b d
c d

我尝试过使用awk脚本但是在长文件上需要花费太多时间:

{
if(NR==1){
    n1=$1
    n2=$2
    test=0
    k=0
    i = 0
    column1[i]=$1
    column2[i]=$2
    printf "%s %s\n", column1[i], column2[i]
}
else{
    for(k=0; k<=i;k++){
        if(column1[k]==$2){
            test=1
            tmp=i
            break
        }
    }
    if(test==1){
        if(column2[tmp]==$1){
            n1=$1
            n2=$2
        }
    }
    else if(n1!=$1||n2!=$2){
        n1=$1
        n2=$2
        i++
        column1[i]=$1
        column2[i]=$2
        printf "%s %s\n", column1[i], column2[i]
    }
    test=0
}
}

有人有想法吗?

1 个答案:

答案 0 :(得分:4)

我认为这可以很简单地实现:

$oForm->get('myElement')->setMessages(array('My defined errormessage - for THIS one element'));

这仅在第一列和第二列尚未按任何顺序显示时打印行(默认操作)。

数组awk '!seen[$1,$2]++ && !seen[$2,$1]' file 通过设置包含第一个和第二个字段的键来跟踪每对字段。表达式seen仅在第一次测试特定!seen[key]++时才为真,因为数组中的值每次都会递增。