我正在尝试将双向同义词应用于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上提供任何指针也会有帮助
答案 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-way
。 Two-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 [, …])
。必须至少有两个。