【问题标题】:counting how many time the order of two consecutive number in a two column files are reversed计算两列文件中两个连续数字的顺序颠倒了多少次
【发布时间】:2013-02-08 18:20:14
【问题描述】:

给定 2 个包含 N 个数字的文件

文件1

1 0.001
2 0.002
3 0.002
4 0.005
5 0.007
6 0.008
7 0.008
8 0.009
9 0.0010
0 0.011

file2 只是 file1 的改组版本:

0 0.011
8 0.009
7 0.008
3 0.002
5 0.007
9 0.0010
1 0.001
4 0.005
2 0.002
6 0.008

我想计算两个连续数字的顺序,但在这种情况下,如果在 file1.dat 的第二列中有两个相同的连续数字(如 2-3 和 6-7 的情况) ) 我希望我们直接将反转计为 0.5,而不查看 file2.dat。在这种情况下,结果将是 4 次反转。在counting how many time the order of two consecutive number in a file are reversed in a second file in BASH

上提出了类似的问题(和答案)

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    我做了两个案例,选择你需要的一个:

    这是 0.5 或 1 个案例结果 =4

    kent$  awk  'FNR==NR{o[NR]=$1;next;}{v[$1]=FNR;m[$1]=$2;n=FNR}                               
            END{ for(i=1;i<=n-1;i++) { t+=m[o[i]]==m[o[i+1]]?0.5:v[o[i]]>v[o[i+1]]?1:0};                                                                                        
                    print "invertions:"t;    
            }' f1 f2
    invertions:4
    

    这是添加额外的 0.5 格 result=6

    kent$  awk  'FNR==NR{o[NR]=$1;next;}{v[$1]=FNR;m[$1]=$2;n=FNR}
            END{ for(i=1;i<=n-1;i++) {t1+=(v[o[i]]>v[o[i+1]])?1:0; t2+=m[o[i]]==m[o[i+1]]?0.5:0};
                    print "invertions:"t1+t2;
            }' f1 f2
    invertions:6
    

    【讨论】:

    • 结果应该是 4,脚本给出 6 次反转。 2 和 3 在第二列中具有相同的值(所以 0.5),4 和 5 是相反的(所以 +1),6 和 7 在第二列中具有相同的值(所以 +0.5),7 和 8 是相反的(+ 1) 和 9 和 0 是相反的 (+1)。反转总数 4
    • @ValerioD.Ciotti 我也注意到了,我更新了答案。现在您可以从我的两个示例中选择正确的一个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2016-11-20
    相关资源
    最近更新 更多