微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 UNIX 工具 (sed/awk/etc) 仅替换此临时文件格式中特定文件的给定密钥? 文件 1:文件 2:输出首先使用 awk 的解决方案现在与 sed 相同

如何解决如何使用 UNIX 工具 (sed/awk/etc) 仅替换此临时文件格式中特定文件的给定密钥? 文件 1:文件 2:输出首先使用 awk 的解决方案现在与 sed 相同

我想用文件 2 中找到的值替换文件 1 中的 location 值。例如,对于给定的示例,location 值应从 24 更改为 32,从 25 更改为 34 .


文件 1:

'location': '24'
'Size':'8'
'location':'25'
'Size':2'

文件 2:

32
34

输出

'location': '32'
'Size':'8'
'location':'34'
'Size':'2'

解决方法

首先使用 awk 的解决方案

awk -F"'" -v OFS="'" '
        $2 == "location" { getline $4 < "file2" }
        1
' file1

说明:每一行都用分隔符 ' 分割,并且在每一“位置”行上,我们将值(字段 $4)替换为从文件 2 中读取的值(getline)。如果 file2 没有足够的值,则该行保持不变。

现在与 sed 相同

sed "s/.*/'location':'&'/" file2 \
| sed -e "
        /^'location'/ ! b
        R /dev/stdin
        d
" file1

说明:GNU sed 有一个 R command,其工作方式类似于 getline 中的 awk 命令。我们首先转换 file2 使其行看起来像 file1(第一个 sed),然后我们将结果通过管道传输到另一个 sed 命令。每次后者看到“位置”行时,它都会将其替换为从 stdin 读取的行。这次,如果 file2 没有足够的值,则删除该行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。