동일한 파일의 필드 값을 비교하여 Linux에서 .txt 파일의 레코드를 조건부로 우회

동일한 파일의 필드 값을 비교하여 Linux에서 .txt 파일의 레코드를 조건부로 우회

.txt파일의 각 줄에 대해 두 날짜를 비교해야 합니다 . 위치 11의 값이 "02407IC"이고 "21100220"에서 "19860220"을 뺀 값이 124이면 이 레코드를 무시하고, 그렇지 않으면 이 레코드를 출력에 쓰고 싶습니다.

지금까지 다음 명령을 시도했지만 sed파일에서 레코드를 우회/제거하는 문제(값을 찾은 경우)를 부분적으로만 해결했지만 두 날짜를 비교하고 해당 비교를 In 명령 02407IC에 포함하는 방법을 알 수 없습니다. sed.

sed -i '/02407IC/d' MARK.TXT

파일에 있는 샘플 데이터입니다. 아래는 실제 파일이 아니고 입력 파일에서 제가 찾고 있는 값입니다. 실제 입력 파일에서 "02407IC"와 같은 값은 위치 398에 있고, "19860220"과 같은 하위 날짜는 위치 265(항상 존재/채워짐)에 있고, "21100220"과 같은 상위 날짜는 위치 690에 있으며, 때로는 더 높은 날짜도 있습니다. 날짜는 공백일 수 있습니다.

19860220 02407IC 21100220
19660121 02501IC 20200218
19670301 02501IC 20200218
19880420 03105IC         

이 작업을 수행하기 위해 sedor 명령을 사용하려고 합니다 .awk

답변1

이것이 당신이하고 싶은 일인 것 같습니다 :

awk '!( ($2 == "02407IC") && (($3 - $1) ~ /^124....$/) )' file

당신이 말하는 "위치"가 무엇인지 잘 모르겠지만 각 행의 문자 위치이며 필드 1은 문자 위치 265에서 시작하고 필드 2는 398에서 시작하며 필드 3은 690에서 시작합니다 (업데이트 된 질문에 따라). 그러면 당신은 할 수 있습니다 :

awk '!( (substr($0,398,7) == "02407IC") && ((substr($0,690,4) - substr($0,265,4)) == 124) )' file

관련 정보