다음과 같은 목록이 있습니다.
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
답변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