if条件を使用して同じファイルから重複エントリを削除するには?

if条件を使用して同じファイルから重複エントリを削除するには?

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

  1. 顧客IDとコード内のファイルに複数のレコードがあり、end_date値がnullでend_dateがnullの場合、end_dateがnullのレコードのみが記録されます。
  2. 顧客IDとコードの2つ以上のレコードがあり、最初のレコードのstart_date、end_date、start_dateがend_dateと等しい場合、null end_dateまたは今日の日付より後の日付のみが記録されます。
  3. 顧客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

おすすめ記事