gpt4 book ai didi

awk - 使用 awk 将一个字符串替换为另一个字符串(文件中包含的映射表)

转载 作者:行者123 更新时间:2023-12-02 05:38:14 24 4
gpt4 key购买 nike

我想知道是否可以只使用哇哇:我正在文件 Fand 中搜索一些正则表达式,我想替换匹配的字符串 (S1)另一个字符串 (S2) 的正则表达式。当然,使用 awk 很容易做到这一点。但是……我的问题是 S2 的值必须从映射的另一个文件中获取S1 到 S2。

示例:

文件F:

abcd 168.0.0.1 qsqsjsdfjsjdf
sdfsdffsd
168.0.0.2 sqqsfjqsfsdf

我在另一个文件中的关联表

168.0.0.1 foo
168.0.0.2 bar

我想得到:

这个结果:

abcd foo qsqsjsdfjsjdf
sdfsdffsd
bar sqqsfjqsfsdf

感谢您的帮助!

编辑:如果我的输入文件有点不同,像这样(IP地址前没有空格):

文件F:

abcd168.0.0.1 qsqsjsdfjsjdf
sdfsdffsd
168.0.0.2 sqqsfjqsfsdf

我不能使用 $1、$2 变量并在关联数组中搜索。我尝试过类似的方法(基于 birei 命题)但它没有用:

FNR < NR {
sub(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/, assoc [ & ] );
print
}

有没有办法在关联数组中搜索匹配的字符串(assoc[ & ] 似乎无效)?

最佳答案

一种方式。这是不言自明的。将关联表中的数据保存在数组中,并在第二个文件中检查每个字段是否与数组的任何键匹配:

awk '
FNR == NR {
assoc[ $1 ] = $2;
next;
}
FNR < NR {
for ( i = 1; i <= NF; i++ ) {
if ( $i in assoc ) {
$i = assoc[ $i ]
}
}
print
}
' associative_file F

输出:

bcd foo qsqsjsdfjsjdf                                                                                                                                                                                                                        
sdfsdffsd
bar sqqsfjqsfsdf

编辑:尝试使用 awk 脚本来处理周围没有空格的 IP。它与之前的类似,但现在它在数组中搜索并尝试在该行的任何位置找到一个 IP(默认为 $0 for gsub)并替换它。

awk '
FNR == NR {
assoc[ $1 ] = $2;
next;
}
FNR < NR {
for ( key in assoc ) {
gsub( key, assoc[ key ] )
}
print
}
' associative_file F

假设 infile 包含文件 F 的第二个示例的内容,输出将是:

abcdfoo qsqsjsdfjsjdf                                                                                                                                                                                                                        
sdfsdffsd
bar sqqsfjqsfsdf

关于awk - 使用 awk 将一个字符串替换为另一个字符串(文件中包含的映射表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377470/

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