希望找到一个用于条件替换的awk单行程序。
每当行的第五行包含表达式时,用addr
替换addr-set
,等于任何其他行的第三行中的表达式。
源/输入格式为:
set addr-set GRP-Africa addr NET-10.1.1.0-24
set addr-set GRP-EMEA addr GRP-Africa
set addr-set GRP-EMEA addr GRP-Europe
set addr-set GRP-EMEA addr GRP-Middle-East
set addr-set GRP-Europe addr NET-10.1.2.0-24
set addr-set GRP-Europe addr GRP-Germany
set addr-set GRP-Germany addr NET-10.1.3.0-24
set addr-set GRP-Middle-East addr NET-10.1.4.0-24
所需的输出格式为:
set addr-set GRP-Africa addr NET-10.1.1.0-24
set addr-set GRP-EMEA addr-set GRP-Africa
set addr-set GRP-EMEA addr-set GRP-Europe
set addr-set GRP-EMEA addr-set GRP-Middle-East
set addr-set GRP-Europe addr NET-10.1.2.0-24
set addr-set GRP-Europe addr-set GRP-Germany
set addr-set GRP-Germany addr NET-10.1.3.0-24
set addr-set GRP-Middle-East addr NET-10.1.4.0-24
嵌套组需要addr-set
,但在源文件中,所有内容都是addr
这看起来像是awk与sub的工作,但我还没有找到解决方案。
答案 0 :(得分:2)
您需要为此处理两次文件。在第一次运行中,您将每行的第3列存储在一个数组中,在第二次运行中,您将检查该数组中是否存储了$ 5:
awk 'FNR==NR{a[$3];next} $5 in a {$4="addr-set"}1' file file