Text-Processing

文件中字元串的部分唯一性 - 僅保留第一個字元串可用

  • October 22, 2021

我有一個名為的文件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

我需要執行一個uniquetasmaxend 結尾的子字元串_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

謝謝你的幫助。

一個簡單的 Awk 就足夠了。形成一個雜湊映射,由唯一標識符字元串鍵入並僅列印這些行

awk -F_ '{ key = $1 FS $2 FS $3 $4 } !unique[key]++ ' file

將分隔符設置為_,通過符號訪問單個作品$1並形成包含 的密鑰$4僅當尚未看到該行的鍵(已形成)時,該表達式!unique[key]++才非零。

假設您的tasmax字元串出現在$1historicalat$4並且不工作。


或者只是使用該工具,通過使用 fields分隔sort來要求它具有唯一性 ( ) 行。適用於 BSD 和 GNU變體-u``_``1-4``sort

sort -u -t_ -k1,4 < file

引用自:https://unix.stackexchange.com/questions/674347