awk

时间:2018-02-20 15:28:37

标签: awk

希望找到一个用于条件替换的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的工作,但我还没有找到解决方案。

1 个答案:

答案 0 :(得分:2)

您需要为此处理两次文件。在第一次运行中,您将每行的第3列存储在一个数组中,在第二次运行中,您将检查该数组中是否存储了$ 5:

awk 'FNR==NR{a[$3];next} $5 in a {$4="addr-set"}1' file file