$> cat file-1 1 2$> cat file-21 2 3$> cat file-31 2 3 4
我想减去列绝对值,并除以每个不同列的一行中所有的总和一次(没有重复列对的组合):
in file-1 case I need to get:0.3333 # because |1-2/(1+2)|in file-2 case I need to get:0.1666 0.1666 0.3333 # because |1-2/(1+2+3)| and |2-3/(1+2+3)| and |1-3/(1+2+3)|in file-3 case I need to get:0.1 0.2 0.3 0.1 0.2 0.1 # because |1-2/(1+2+3+4)| and |1-3/(1+2+3+4)| and |1-4/(1+2+3+4)| and |2-3/(1+2+3+4)| and |2-4/(1+2+3+4)| and |3-4/(1+2+3+4)|解决方法 这应该工作,虽然我猜你在输入数据中犯了一个小错误.根据您的第三种模式,以下数据应为 –
代替:
in file-2 case I need to get:0.1666 0.1666 0.3333 # because |1-2/(1+2+3)| and |2-3/(1+2+3)| and |1-3/(1+2+3)|
它应该是:
in file-2 case I need to get:0.1666 0.3333 0.1666 # because |1-2/(1+2+3)| and |1-3/(1+2+3)| and |2-3/(1+2+3)|
这是awk one liner:
awk 'NF{ a=0; for(i=1;i<=NF;i++) a+=$i; for(j=1;j<=NF;j++) { for(k=j;k<NF;k++) printf("%s ",-($j-$(k+1))/a) } print ""; next; }1' file
精简版:
awk 'NF{for (i=1;i<=NF;i++) a+=$i; for (j=1;j<=NF;j++){for (k=j;k<NF;k++) printf("%2.4f ",-($j-$(k+1))/a)}print "";a=0;next;}1' file
输入文件:
[jaypal:~/Temp] cat file1 21 2 31 2 3 4
测试:
[jaypal:~/Temp] awk 'NF{ a=0; for(i=1;i<=NF;i++) a+=$i; for(j=1;j<=NF;j++) { for(k=j;k<NF;k++) printf("%s ",-($j-$(k+1))/a) } print ""; next; }1' file0.333333 0.166667 0.333333 0.166667 0.1 0.2 0.3 0.1 0.2 0.1
从较短版本测试:
[jaypal:~/Temp] awk 'NF{for (i=1;i<=NF;i++) a+=$i; for (j=1;j<=NF;j++){for (k=j;k<NF;k++) printf("%2.4f ",-($j-$(k+1))/a)}print "";a=0;next;}1' file 0.3333 0.1667 0.3333 0.1667 0.1000 0.2000 0.3000 0.1000 0.2000 0.1000总结
以上是内存溢出为你收集整理的linux – 没有重复的排列列全部内容,希望文章能够帮你解决linux – 没有重复的排列列所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)