Text-Processing
文件中字元串的部分唯一性 - 僅保留第一個字元串可用
我有一個名為的文件
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
我需要執行一個
unique
以tasmax
end 結尾的子字元串_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
字元串出現在$1
和historical
at$4
並且不工作。或者只是使用該工具,通過使用 fields分隔
sort
來要求它具有唯一性 ( ) 行。適用於 BSD 和 GNU變體-u``_``1-4``sort
sort -u -t_ -k1,4 < file