次のリストがあります。
2017-12-11 AAOI 40.33
2017-11-15 AAOI 44.3492
2017-12-15 AEIS 70.98
2017-11-15 AEIS 80.137
2017-10-23 AIEQ 25.1601
2017-11-15 AMBA 52.6501
2017-12-05 ATHM 57.2
2017-11-09 AUDC 7.02
2017-12-22 BEW 0.58
2017-10-17 BIOP 8.19
2017-12-08 BLDP 4.86
2017-12-21 BLOC 2.3
2017-12-12 BLOC 2.7
2017-12-11 BLOC 2.32
2017-12-04 BLOC 2.39
2017-11-27 BLOC 2.6
2017-11-15 BOX 21.63
2017-12-22 BTL 10.5638
etc.
2番目の列に保存されているシンボルを使用して、各シンボルの最初の(最も近い)一致を取得したいと思います。上記の入力例に基づいて、出力は次のようになります。
2017-12-11 AAOI 40.33
2017-12-15 AEIS 70.98
2017-10-23 AIEQ 25.1601
2017-11-15 AMBA 52.6501
2017-12-05 ATHM 57.2
2017-11-09 AUDC 7.02
2017-12-22 BEW 0.58
2017-10-17 BIOP 8.19
2017-12-08 BLDP 4.86
2017-12-21 BLOC 2.3
2017-11-15 BOX 21.63
2017-12-22 BTL 10.5638
リストは、2列に基づいて昇順にソートされ、次に1列に基づいて降順にソートされました。
私はawkを使用して一致パターンを$ 2(2番目の列)に設定し、このパターンに基づいて一致を先頭にパイプするつもりです。
これが起こったのは今回が初めてではありません。一意性は列2にのみ基づいている最初の一意の発生です。 uniq by 列に似ており、最初の項目のみを返します。そのため、ラベルを贅沢に使用してください。
私はドットを接続することはできません。あなたは何をしますか?
答え1
答え2
私はawkとsedを組み合わせてこれを行いました。
for w in `cat filename | awk '{print $2}' | sort | uniq`; do sed -n '/'$w'/p' filename| sed -n '1p'; done
出力
2017-12-11 AAOI 40.33
2017-12-15 AEIS 70.98
2017-10-23 AIEQ 25.1601
2017-11-15 AMBA 52.6501
2017-12-05 ATHM 57.2
2017-11-09 AUDC 7.02
2017-12-22 BEW 0.58
2017-10-17 BIOP 8.19
2017-12-08 BLDP 4.86
2017-12-21 BLOC 2.3
2017-11-15 BOX 21.63
2017-12-22 BTL 10.5638