my_file.txt
다음 문자열을 포함하는 파일이 있습니다 .
tasmax_day_ACCESS_historical_r1i1p1f3_gn.nc
tasmax_day_EC-Earth3_historical_r1i1p1f1_gn.nc
tasmax_day_EC-Earth3_historical_r1i1p1f1_gr.nc
tasmax_day_EC-Earth3_historical_r1i1p1f3_gn.nc
tasmax_day_HadGEM-MM_historical_r1i1p1f1_gn.nc
tasmax_day_HadGEM-MM_historical_r1i1p1f1_gr.nc
tasmax_day_HadGEM-MM_historical_r3i1p1f1_gn.nc
tasmax_day_MIROC_historical_r1i1p1f1_gn.nc
tasmax_day_MIROC_historical_r2i1p1f1_gn.nc
end로 시작하는 하위 문자열을 수행해야 하며 unique
각 하위 문자열에 대해 이를 포함하는 줄만 유지합니다(알파벳순으로 먼저).tasmax
_historical
내 예상 결과 my_file.txt
는 다음과 같습니다.
tasmax_day_ACCESS_historical_r1i1p1f3_gn.nc
tasmax_day_EC-Earth3_historical_r1i1p1f1_gn.nc
tasmax_day_HadGEM-MM_historical_r1i1p1f1_gn.nc
tasmax_day_MIROC_historical_r1i1p1f1_gn.nc
도움을 주셔서 감사합니다.
답변1
간단한 awk로 충분합니다. 고유 식별자 문자열로 키가 지정된 해시 맵을 형성하고 해당 행만 인쇄합니다.
awk -F_ '{ key = $1 FS $2 FS $3 $4 } !unique[key]++ ' file
구분 기호를 로 설정하면 _
기호를 통해 개별 작품에 접근할 수 $1
있으며 까지의 키가 구성됩니다 $4
. (형성된) 행의 키가 다음과 같은 경우 !unique[key]++
에만아니요이미 봤어요.
이것가설문자열 은 및 에 tasmax
표시됩니다 . 그렇지 않으면 작동하지 않습니다.$1
historical
$4
또는 도구를 사용하여 필드로 구분하여 sort
고유한 () 행을 요청하세요 . BSD 및 GNU 변형과 함께 작동-u
_
1-4
sort
sort -u -t_ -k1,4 < file