问题描述
我想用文件 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 没有足够的值,则删除该行。