也许不是一个很具体的问题,但我感到困惑之间的差异grep,awk并sed在他们的Unix/Linux系统管理和文本处理的作用方面.
我正在寻找一个允许我在文件中搜索/替换的Unix命令 - 我需要用空格替换某个文件中的所有逗号.我需要在脚本中执行此操作,并且我希望避免逐行解析/读取文件.是否有一个简单的unix命令可以让我这样做?
几年来,我经常需要将(已排序)文本的行与匹配的第一个字段组合在一起,而我从未找到过优雅(即单行unix命令行)的方法.我想要的是与unix join命令的相似之处,但是join需要2个文件,每个键最多出现一次.我想从一个文件开始,其中一个键可能出现多个tile.
我有一个执行此操作的ruby和perl脚本,但是没有办法将我的算法缩短为单行.经过多年的UNIX的使用,我还在学习新的技巧有comm,paste,uniq,等,我怀疑有一个聪明的办法来做到这一点.
有一些相关的问题,比如将所有具有相同第一列的行连接到同一行 ; 命令行匹配第一个字段匹配的行(sed,awk等) ; 并将线条与匹配的键组合在一起 - 但这些解决方案从未真正提供干净可靠的解决方案.
这是示例输入:
apple:A fruit
apple:Type of: pie
banana:tropical fruit
cherry:small burgundy fruit
cherry:1 for me to eat
cherry:bright red
Run Code Online (Sandbox Code Playgroud)
这是示例输出:
apple:A fruit;Type of: pie
banana:tropical fruit
cherry:small burgundy fruit;1 for me to eat;bright red
Run Code Online (Sandbox Code Playgroud)
这是我理想的语法:
merge --inputDelimiter=":" --outputDelimiter=";" --matchfield=1 infile.txt
Run Code Online (Sandbox Code Playgroud)
"matchfield"实际上是可选的.它可能永远是第一个领域.分隔符的后续出现应该被视为纯文本.
我不介意perl,ruby,awk单行,如果你能想到一个简短而优雅的算法.这应该能够处理数百万行输入.有任何想法吗?