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