【发布时间】:2016-07-17 03:44:17
【问题描述】:
我是一个新的 Linux 用户,我还没有弄清楚如何使用它,我以非常丑陋的方式解决了这个问题,但我相信它可以通过巧妙地使用 sed 或 awk 来解决.
问题有点难以解释,但它涉及如何重叠两个按特定规则格式化的文本文件。
问题一:
规则:file1 有一些行等于字符串“custom”,这些行必须分别替换为存在于file2 中的行,所以第一次“custom”出现在file1, file2 的第一行将被放置而不是 file2 中具有“custom”的行,第二次“custom”出现在 file1 中,它需要被 file2 的第二行替换,等等。
此外,file1 中“custom”行的出现次数等于file2 中的行数。
示例:
文件1:
line1
line2
custom
line4
custom
line6
文件2:
line3
line5
输出:
line1
line2
line3
line4
line5
line6
解决这个问题的一种方法可能是搜索custom的第一个出现,用file2中的第一行替换它,从file2中删除第一行,搜索下一个自定义,取@中的第一行987654339@,删除它等等。我确信 sed/grep/awk 存在更好的方法。
问题 2:
代码的用户实际上需要像我告诉他的那样指定file2,所以如果问题是这样表述的,可能会更容易解决:
这些是规则:file1 和 file2 现在有相同的行数。 file1 中的某些行与上一个问题中的字符串“custom”相等。 File2 在 file1 中的行不等于“custom”的地方有空行,所以我真的想将 file2 粘贴到 file1 上,只用“custom”覆盖行。
文件 1 如下所示:
line1
custom
line3
custom
line5
文件 2 是:
/n
line2
/n
line4
/n
/n 代表空行,输出为
line1
line2
line3
line4
line5
我还想要覆盖 file1 的解决方案的输出(我认为我可以通过 solution >> file1 来完成)
我想要解决问题和解释你使用的命令实际上做了什么。
对于当前版本的代码,我实际上在 file1 中只有 1-3 行,所以我通过 file2 中的标题和尾行解决了很多 if-else 场景的问题,但我确信更优雅的东西是可能的.
额外问题:
我首先将file1中的行内容存储为单独的变量($line1,$line2等),几乎解决了awk的问题,但它不想接受$var,因为@ 987654348@ 引号,也不适用于"" 引号。
我看到 sed 可以做强大的事情,但它可以使用保存在字符串变量中的模式运行吗?我尝试用"" 和$var 调用sed,但它总是有效吗?我对 awk 进行了同样的尝试,但它坏了。
【问题讨论】:
-
请展示您的尝试
-
几乎解决了 awk 的问题:你能展示你的解决方案吗
-
第二个例子不应该有两个
line3行吗? -
对不起,这是我在网上找到的,当它不起作用时放弃了。我编辑了问题 2。
-
我的解决方案有 39 行长,file1 中的行表示我希望模拟执行的扫描点列表(数字序列,如 1 2 3 4 5),如果用户指定 2D 或 3D 扫描,则文件将有 2 或 3 行,他可以通过脚本中的标志指定他的扫描范围(这将执行他的条目的 seq ''),但如果他认为标志的值是“自定义”,那么他有指定他存储自定义扫描点的文件。