문자열로 시작하는 줄의 필드만 정의된 문자열로 바꿉니다.

문자열로 시작하는 줄의 필드만 정의된 문자열로 바꿉니다.

제가 처리해야 할 파일입니다.

ENR1;203023;0000;H606626;001505;EL;00;1234;0000100;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201443;000000000;000000000;000000000;000000000;
ENR1;203357;0000;H606626;001653;EL;01;2546;0000800;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201503;000000000;000000000;000000000;000000000;
ENR6;001811;150316;000;00;201624;000000000;000000000;000000000;000000000;
ENR1;203385;0000;H606625;000615;EL;00;5861;0000100;00;00;201346100;H6022418;

각 행의 필드 7을 바꿔야 합니다. 값이 00이면 으로 설정해야 합니다 01. 그러나 첫 번째 필드가 다음과 같은 행에 대해서만ENR1!

awk -F';' -v OFS=';' 'NR>=1{sub("00","01",$7)}1' file > result

이는 작동하지만 $7 필드를 ENR6으로 시작하는 줄로 바꿉니다.

조건 추가 방법 (ENR1로 시작하는 줄만?)

답변1

나는 노력할 것이다

awk -F';' -v OFS=';' '$7 == "00" && $1 == "ENR1" { $7 = "01" } {print} ' file > result

어디

  • $7 == "00" && $1 == "ENR1" { $7 = "01" }로 시작하는 줄에만 적용됩니다 ENR1. 일곱 번째 필드는 다음과 같습니다.00
  • $7 = "01"필드 7을 01로 설정
  • { print }변경된 ENR1을 포함하여 모든 줄을 인쇄합니다.

  • NR>=1실제 파일에 헤더 줄이 있는지 계속 테스트할 수 있습니다 .

답변2

짧은sed방법:

sed -E 's/^(ENR1;([^;]+;){5})00;/\101;/' file

산출:

ENR1;203023;0000;H606626;001505;EL;01;1234;0000100;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201443;000000000;000000000;000000000;000000000;
ENR1;203357;0000;H606626;001653;EL;01;2546;0000800;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201503;000000000;000000000;000000000;000000000;
ENR6;001811;150316;000;00;201624;000000000;000000000;000000000;000000000;
ENR1;203385;0000;H606625;000615;EL;01;5861;0000100;00;00;201346100;H6022418;

  • ^(ENR1;([^;]+;){5})00;ENR1([^;]+;){5}- 5번째 필드 와 7번째 필드 부터 라인 캡쳐00;

관련 정보