我正在尝试将双向同义词应用于 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 上提供任何可用的指针也会有帮助
最佳答案
这可能对你有用(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
这使用分组和反向引用来定制输出以达到所需的结果。当然,第二列可能有更多值,并且需要以与双向
类似的方式进行硬编码。
数据变化如下:
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 行和单向
。 Two-way
进行复制并循环使用 x
分隔值,直至重复,此时它会删除模式空间中的值。
关于java - 完全传递值生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680668/