이 입력 파일이 있는데 한 줄을 수정하고 나머지는 유지하고 싶습니다.
입력하다:
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|
수정 사항은 매우 미묘합니다. 수정하고 싶은 유일한 줄에 집중합니다.
입력하다:
구성.Ini|결과|값|AAA#삼#0#DOYO;1#1#TOTO#0##1###0#1###-1|
원하는 출력:
구성.Ini|결과|값|AAA#1#0#DOYO;1#삼#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
. 확장된 정규식 대체가 아닌 |
리터럴로 처리되도록 백슬래시로 이스케이프 해야 합니다 .|