Teilweise eindeutige Zeichenfolgen in der Datei - nur die erste verfügbare Zeichenfolge beibehalten

Teilweise eindeutige Zeichenfolgen in der Datei - nur die erste verfügbare Zeichenfolge beibehalten

Ich habe eine Datei namens my_file.txt, die die folgenden Zeichenfolgen enthält:

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

Ich muss eine Operation uniquefür die Teilzeichenfolge durchführen, die mit „ tasmaxEnde“ beginnt und auf „Ende“ endet. Dabei _historicalbehalte ich für jede Teilzeichenfolge nur die Zeile, die sie enthält und in alphabetischer Reihenfolge an erster Stelle steht.

Meine erwartete Ausgabe my_file.txtist die folgende:

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

Vielen Dank für jede Hilfe.

Antwort1

Ein einfaches Awk würde genügen. Bilden Sie eine Hash-Map, die durch die eindeutige Identifikationszeichenfolge als Schlüssel gekennzeichnet ist, und drucken Sie nur die Zeilen

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

Wenn das Trennzeichen auf gesetzt ist _, greifen Sie auf die einzelnen Werke nach $1Notation zu und bilden den Schlüssel bis einschließlich $4. Der Ausdruck !unique[key]++ist nur dann ungleich Null, wenn der (aus der Zeile gebildete) Schlüssel istnichtschon gesehen.

Dasgeht davon ausIhre tasmaxZeichenfolge kommt bei $1und historicalbei vor $4und funktioniert ansonsten nicht.


Oder verwenden Sie einfach das sortTool, indem Sie es auf eindeutige ( -u) Zeilen beschränken, indem _Sie die Felder verwenden 1-4. Funktioniert sowohl auf BSD- als auch auf GNU- sortVarianten

sort -u -t_ -k1,4 < file

verwandte Informationen