AWK - 如何用模式替换一行?

AWK - 如何用模式替换一行?

我有这个输入文件,我想修改一行并保留其余行:

输入 :

Config.Ini|GENERAL|Release||
Config.Ini|GENERAL|Foo1|0|
Config.Ini|GENERAL|Foo2|65#36|
Config.Ini|RESULT|Value|AAA#3#0#DOYO;1#1#TOTO#0##1###0#1###-1|
Config.Ini|RESULT|VERIF|0;162#3;3;;1;1;0;3;;;;####1#1;;;|
Config.Ini|PHONE|France|33|
Config.Ini|PHONE|Italy|39|

我想使用 AWK 来得到这个结果:

Config.Ini|GENERAL|Release||
Config.Ini|GENERAL|Foo1|0|
Config.Ini|GENERAL|Foo2|65#36|
Config.Ini|RESULT|Value|AAA#1#0#DOYO;1#3#TOTO#0##1###0#1###-1|
Config.Ini|RESULT|VERIF|0;162#3;3;;1;1;0;3;;;;####1#1;;;|
Config.Ini|PHONE|France|33|
Config.Ini|PHONE|Italy|39|

修改非常微妙。我专注于我想要修改的唯一一行。

输入 :

Config.Ini|结果|值|AAA#3#0#DOYO;1#1#TOTO#0##1###0#1###-1|

所需输出:

Config.Ini|结果|值|AAA#1#0#DOYO;1#3#TOTO#0##1###0#1###-1|

我怎样才能得到这个结果?

答案1

$ awk -F'#' -v OFS='#' '/RESULT\|Value/ {t=$2;$2=$5;$5=t}1' input.txt 
onfig.Ini|GENERAL|Release||
Config.Ini|GENERAL|Foo1|0|
Config.Ini|GENERAL|Foo2|65#36|
Config.Ini|RESULT|Value|AAA#1#0#DOYO;1#3#TOTO#0##1###0#1###-1|
Config.Ini|RESULT|VERIF|0;162#3;3;;1;1;0;3;;;;####1#1;;;|
Config.Ini|PHONE|France|33|
Config.Ini|PHONE|Italy|39|

使用#作为输入和输出的字段分隔符,交换包含 的行上的字段 2 和 5 RESULT|Value。必须|使用反斜杠转义,以便将其视为文字|而不是扩展正则表达式替换。

相关内容