Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何使用unix命令从文件中删除第'v'行(当第'u v'行已存在时)_Shell_Unix_Awk_Graph - Fatal编程技术网

Shell 如何使用unix命令从文件中删除第'v'行(当第'u v'行已存在时)

Shell 如何使用unix命令从文件中删除第'v'行(当第'u v'行已存在时),shell,unix,awk,graph,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命令已经存在行uv时,我想删除行vu。例如,我想在这里获得: 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

我有以下测试数据:

a b
a c
b a
b c
b d
c a
c b
c d
d b
d c
当使用unix命令已经存在行
uv
时,我想删除行
vu
。例如,我想在这里获得:

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
}
}
{
如果(NR==1){
n1=1美元
n2=2美元
测试=0
k=0
i=0
第1列[i]=1美元
第2栏[i]=2美元
printf“%s%s\n”,第1列[i],第2列[i]
}
否则{

对于(k=0;k我认为这可以非常简单地实现:

awk '!seen[$1,$2]++ && !seen[$2,$1]' file
这仅在第一列和第二列尚未按任意顺序显示时打印行(默认操作)


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

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

awk '!seen[$1,$2]++ && !seen[$2,$1]' file
这仅在第一列和第二列尚未按任意顺序显示时打印行(默认操作)

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