入力から一致するパターンを取得したレコードの最初の出現を取得します。

入力から一致するパターンを取得したレコードの最初の出現を取得します。

次のリストがあります。

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つあります。

sort -u -k2,2 infile
awk -F" " '!_[$2]++' infile

答え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

関連情報