.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
이 작업을 수행하기 위해 sed
or 명령을 사용하려고 합니다 .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