gpt4 book ai didi

AWK:替换函数 sub() 不起作用

转载 作者:行者123 更新时间:2023-12-04 19:27:45 24 4
gpt4 key购买 nike

我需要在文件“cfg_file”中搜索多行文本并将该文本替换为另一个文本。要搜索的文本在“cfg_name”中,替换文本在“cfg_value”中。我正在使用 ubuntu m/c。

配置文件:

rem01=("LOG_CHAN01_REM_IP" transport("tcp") port( LOG_CHAN01_REM_PORT ) );
rem02=("LOG_CHAN02_REM_IP" transport("tcp") port( LOG_CHAN02_REM_PORT ) );

配置名称:

LOG_CHAN01_REM_IP
LOG_CHAN01_REM_PORT
LOG_CHAN02_REM_IP
LOG_CHAN02_REM_PORT

配置值:

10.123.122.52
50001
10.15.19.51
50002

我使用了下面的脚本(从网络上的一些早期查询中获得),但没有按预期工作。有什么想法吗???

awk 'BEGIN { RS="" } 
FILENAME==ARGV[1] { s=$0 }
FILENAME==ARGV[2] { r=$0 }
FILENAME==ARGV[3] { sub(s,r); print }
END { print NR, "Students Records are processed." }
' ./cfg_name ./cfg_value ./cfg_file > ./outfile

最佳答案

AWK解决方案

有更好的工具可以做到这一点。但是,如果您坚持使用 awk:

FILENAME == ARGV[1] {
name[FNR] = $0
}

FILENAME == ARGV[2] {
value[name[FNR]] = $0
}

FILENAME == ARGV[3] && FNR <= 20000 {
for (n in value) {
gsub(n, value[n]);
}
print
}

M4解决方案

正如 Catcall 所建议的,我们可以使用 m4:

#!/bin/bash
# Script's arguments: cfg_name cfg_value cfg_file
{
paste $1 $2 | while read name value
do
echo "define(\`${name}', \`${value}')"
done
cat $3
} | m4
echo "$(wc -l $3) Students Records are processed."

关于AWK:替换函数 sub() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482416/

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