파일 내에서 부분적으로 고유한 문자열 - 사용 가능한 첫 번째 문자열만 유지됩니다.

파일 내에서 부분적으로 고유한 문자열 - 사용 가능한 첫 번째 문자열만 유지됩니다.

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표시됩니다 . 그렇지 않으면 작동하지 않습니다.$1historical$4


또는 도구를 사용하여 필드로 구분하여 sort고유한 () 행을 요청하세요 . BSD 및 GNU 변형과 함께 작동-u_1-4sort

sort -u -t_ -k1,4 < file

관련 정보