java - 完全传递值生成

标签 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 上提供任何可用的指针也会有帮助

最佳答案

这可能对你有用(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/

相关文章:

java - 在使用 SwingBuilder 构建的 UI 中显示来自 Java 线程的变量

objective-c - 对象有效时 NSDictionary writeToFile 失败,权限为 0k

linux - 嵌入式linux中rootfs中有多个源文件时如何构建?

bash - 在没有 find 命令的情况下检查文件是否超过 30 天

java - 是否可以在获取响应之前检查 HTTP post 请求的身份验证状态?

java - 我如何才能使 Maven 模块仅在父部署时进入测试阶段?

java - lwjgl:当我调整窗口大小时,显示模式的大小不会改变。

macos - SQLite 打不开——Meteor create app

javascript - 带有隐藏滚动条的 Lion/Mountain Lion 上的 CSS 悬停错误

regex - 如何使用 sed 去掉最后一个字符?