gpt4 book ai didi

linux - Linux 中两个文件重叠或分别用 file2 中的行替换 file1 中的行

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:00 25 4
gpt4 key购买 nike

我是一个新的 Linux 用户,我仍然不知道如何使用它,我以非常丑陋的方式解决了这个问题,但我确信它可以通过巧妙地使用 sedawk 来解决。问题有点难以解释,但它涉及如何重叠按某些规则格式化的两个文本文件。

问题 1:

规则: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 中删除第一行,搜索下一次出现的 custom,获取 file2 中的第一行,将其删除,依此类推。我确信 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,而且它也不适用于 "" 引号。我看到 sed 可以做一些强大的事情,但是它可以使用保存在字符串变量中的模式运行吗?我尝试使用 "" 调用 sed ,并且 $var 有效,但它总是有效吗?我用 awk 尝试了同样的操作,但它失败了。

最佳答案

awk 来救援!

对于第一个问题,这里有一个使用 getline 的简单解决方案,通常被认为是危险的,但如果您对副作用免疫,则没有害处。

$ awk '/custom/{getline < "file2"; print; next} 1' file1

line1
line2
line3
line4
line5
line6

对于第二种情况,首先将文件与一些未使用的字符组合起来可能会更容易,然后让 awk 选择正确的选择。

$ paste -d~ file2 file1 | awk -F~ '{print $1==""?$2:$1}'

line1
line2
line3
line3
line4

关于linux - Linux 中两个文件重叠或分别用 file2 中的行替换 file1 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com