awk 和 sed 将每行的行尾附加到相关行

awk 和 sed 将每行的行尾附加到相关行

我想做一些行操作,但被困在逐行处理中。我的文件如下所示:

10.10.10.10 ABtest
10.10.10.11 ABprod

我想根据行末的字符串在每一行附加一个字符串。

我的方法是使用 awk 测试ABtest行尾的字符串,然后使用 sed 将其转换ABtesttest。之后,我想将输出附加到每个相关行。

我想要输出如下内容:

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

答案1

不需要两者,sedawk可以使用一个工具。实现目标的代码awk可能是

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/搜索正则表达式,该{<code>}部分告诉 awk 如何处理该记录。在此特定情况下,该函数gsub将替换第二列中出现的所有“AB”——如果您只想替换第一次出现,请使用sub(),但关于正则表达式,我猜您可以使用其中一个或另一个,结果相同——随后打印结果。

您的问题中没有明确指出在要编辑的行之间是否有任何行可以不加修改地打印。如果是这种情况,您需要在匹配和编辑后跳转到下一条记录,如下所示:

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

也许你应该使用 创建一个更具体的测试if。我强烈建议你查看一些 awk 资源(这里或者这里例如)

相关内容