完全传递价值生成

时间:2018-02-08 08:17:45

标签: java macos shell unix awk

我正在尝试将双向同义词应用于CSV文件中的输入数据

示例输入:

Col A,Col B
sleep tightxjump highxjump low,Two-way
shell scriptxawk script,One-way
oops langxstructure lang,Two-way

预期产出:

Col A.     
sleep tight=>jump high,jump low
jump high=>sleep tight,jump low
jump low=>jump high,sleep tight
shell script=>awk script
oops lang=>structure lang
structure lang=>oops lang

理想情况下,如果它是双向的,则应该存在完全的传递关系。

我已经尝试过使用awk和shell但无法使其正常工作。任何指针都会受到赞赏。

PS:如果在java上提供任何指针也会有帮助

2 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -r '1s/ \..*//p;/One-way/{s/ \..*//;s/x/=>/;s/x/,/;b};/Two-way/{s/ \..*//;s/(.*)x(.*)x(.*)/\1=>\2,\3\n\2=>\1,\3\n\3=>\1,\2/;b};d' file

这使用分组和反向引用来将输出定制为所需的结果。当然,第二列可能还有其他值,需要与Two-way类似地进行硬编码。

继续改变数据:

sed -r '1s/\..*//;t;/One-way/{s/\s+\S+$//;s/x/=>/;s/x/,/g;b};/\n/{/^([^x]*x).*\n\1/d;bb};/Two-way/{s/\s+\S+$//;s/.*/&\n&/;:b;s/^([^x]*)x(.*)\n/&\2x\1\n/;s/x/=>/;:a;ta;s/x(.*\n.*\n)/,\1/;ta;P;D}' file

如上所述第1行和One-wayTwo-way复制并循环遍历x分隔值,直到它重复,当它删除模式空间中的值时。

答案 1 :(得分:1)

正如您已经安装了@objc func zoom(gesture: UIPinchGestureRecognizer) { let view = self.view as! SCNView let node = view.scene!.rootNode.childNode(withName: "Camera", recursively: false) let scale = gesture.scale switch gesture.state { case .began: break case .changed: node!.position.z = node!.position.z - Float(scale) break default: break } } - 这是先进的 gawk 解决方案:

awk

输出:

awk 'NR==1{ print $1,$2$3; next }
    { split($1, a, "x") }
    {
        n=($3=="Two-way"? 4:2);
        for (i=1; i<n; i++) { 
            k=(i>1? i-1: i+1);
            printf "%s=>%s,%s\n", a[i], a[k], a[xor(i,k)] 
        } 
    }' file
  

如果任一位为1,则Col A. a1=>a2,a3 a2=>a1,a3 a3=>a2,a1 z1=>z2,z3 操作的结果为1,但不是1   两个。

     

<强> XOR
     返回参数的按位xor(v1, v2 [, …])。必须至少有两个。