我有这个输入文件,我想修改一行并保留其余行:
输入 :
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
。必须|
使用反斜杠转义,以便将其视为文字|
而不是扩展正则表达式替换。