입력에서 일치하는 패턴을 얻은 레코드의 첫 번째 발생을 검색합니다.

입력에서 일치하는 패턴을 얻은 레코드의 첫 번째 발생을 검색합니다.

다음과 같은 목록이 있습니다.

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.

두 번째 열에 저장된 기호를 사용하여 각 기호에 대해 첫 번째(가장 가까운) 일치 항목을 얻고 싶습니다. 위의 입력 예를 바탕으로 출력은 다음과 같아야 합니다.

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에만 기반을 둔 최초의 고유한 발생입니다. uniq by 컬럼과 유사하며 첫 번째 항목만 반환합니다. 따라서 라벨을 아낌없이 사용하세요.

나는 점들을 연결할 수 없습니다. 당신은 무엇을 할 것인가?

답변1

이를 수행하는 방법에는 두 가지가 있습니다.

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

관련 정보