最初の列が繰り返される場合、最長行のみを保持

最初の列が繰り返される場合、最長行のみを保持

入力する:

user@server:~/bar/foobar$ SAT=$(date -dsaturday +%Y-%m-%d); SUN=$(date -dsunday +%Y-%m-%d)
user@server:~/bar/foobar$ awk 'BEGIN {FS="'^'"} {print $1"\t"$3"\t"$6}' STs.csv STt.csv | egrep -w "${SAT}|${SUN}" | sort -u
'ST30074650'        '2015-10-17 10:00'
'ST30074650'    '[email protected]'  '2015-10-17 10:00'
'ST30085367'    '[email protected]'  '2015-10-18 13:00'
'ST30086369'        '2015-10-17 13:00'
'ST30115016'    '[email protected]'  '2015-10-18 13:00'
'ST30124587'        '2015-10-18 09:00'
'ST30123591'        '2015-10-18 09:00'
user@server:~/bar/foobar$ 

希望の出力:

user@server:~/bar/foobar$ SAT=$(date -dsaturday +%Y-%m-%d); SUN=$(date -dsunday +%Y-%m-%d)
user@server:~/bar/foobar$ awk 'BEGIN {FS="'^'"} {print $1"\t"$3"\t"$6}' STs.csv STt.csv | egrep -w "${SAT}|${SUN}" | sort -u | SOMEMAGIC
'ST30074650'    '[email protected]'  '2015-10-17 10:00'
'ST30085367'    '[email protected]'  '2015-10-18 13:00'
'ST30086369'        '2015-10-17 13:00'
'ST30115016'    '[email protected]'  '2015-10-18 13:00'
'ST30124587'        '2015-10-18 09:00'
'ST30123591'        '2015-10-18 09:00'
user@server:~/bar/foobar$ 

質問:したがって、最初の列が繰り返される場合(例: "ST30074650") - 長い行だけを維持する必要があります。 「SOMEMAGIC」の誰かがどのようにこれを行うことができますか?

ベストアンサー1

私はSOMEMAGICがそれとどのように関連しているか理解していません

このawkファイルを試してください

{ if ( $1 in a ) {
     if ( length(a[$1]) < length($0)) a[$1]=$0 ;
            } # $1 in a
  else  a[$1]=$0 ; }

END { for ( b in a ) {print a[b] ;}  }

使用してください(事前に並べ替える必要はありません)

... egrep -w "${SAT}|${SUN}" | awk -f u.awk | sort

おすすめ記事