我有以下测试数据:
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
}
}
有人有想法吗?
答案 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]++
时才为真,因为数组中的值每次都会递增。