![if 조건을 사용하여 동일한 파일에서 중복 항목을 제거하는 방법은 무엇입니까?](https://linux55.com/image/67626/if%20%EC%A1%B0%EA%B1%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%A4%91%EB%B3%B5%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
INPUT FILE: has all these values without header:
customer ID, code, start_date, end_date 124343, DCW, 2015-07-06, 2016-08-03 235432, ABC, 2015-04-26, NULL 235432, ABC, 2015-04-26, 2015-06-20 3242342, ABC, 2015-08-02, 2015-07-28 2332434, DCW, 2015-02-09, 2015-06-23 2332434, DCW, 2015-06-23, NULL
- 고객 ID 및 코드의 파일에 레코드가 2개 이상 있고 end_date 값이 null이고 end_date가 null인 경우 end_date가 null인 레코드만 기록됩니다.
- 고객 ID 및 코드에 대한 레코드가 2개 이상 있고 첫 번째 레코드의 start_date, end_date, start_date가 end_date와 동일한 경우 null end_date 또는 오늘 날짜보다 이후 날짜만 기록됩니다.
- 고객 ID 및 코드의 파일에 2개 이상의 레코드가 있고 시작 날짜가 2개인 경우 최대 날짜 값만 고려됩니다. 필수 출력에는 고객 ID와 코드 레코드만 필요합니다.
customer ID, code, start_date, end_date 124343, DCW, 2015-07-06, 2016-08-03 235432, ABC, 2015-04-26, null 3242342, ABC, 2015-08-02, 2015-07-28 2332434, DCW, 2015-06-23, null
답변1
awk '
{
if($1$2==cust){
if(startdate<$3){
custline=$0
startdate=$3
enddate=$4
next
}
if(startdate==$3 && enddate<$4){
custline=$0
startdate=$3
enddate=$4
next
}
}else{
if(custline!=""){ print custline }
custline=$0
cust=$1$2
startdate=$3
enddate=$4
next
}
}END{print custline}' inputfile
가정: 1. 2개 이상의 "코드"를 갖고 있고 이러한 코드를 별도의 항목으로 처리하려는 고객이 있을 수 있습니다. 2. 날짜 형식은 예와 같이 유지됩니다: YYYY-MM-DD