제가 처리해야 할 파일입니다.
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;