bash supprimer la condition de la ligne

Je n’ai pas pu trouver de solution pour supprimer conditionnellement une ligne dans un fichier en utilisant bash. Le fichier contient les dates de l’année dans les chaînes et la ligne correspondante ne doit être supprimée que si l’année est inférieure à une valeur de référence.

Le fichier ressemble à ceci:

'zg_Amon_MPI-ESM-LR_historical_r1i1p1_196001-196912.nc' 'MD5' 'zg_Amon_MPI-ESM-LR_historical_r1i1p1_197001-197912.nc' 'MD5' 'zg_Amon_MPI-ESM-LR_historical_r1i1p1_198001-198912.nc' 'MD5' 'zg_Amon_MPI-ESM-LR_historical_r1i1p1_199001-199912.nc' 'MD5' 'zg_Amon_MPI-ESM-LR_historical_r1i1p1_200001-200512.nc' 'MD5' 

Je veux obtenir l’année 1969 de la ligne 1 et la comparer à une référence (disons 1980) et supprimer toute la ligne si l’année est inférieure à la référence. Cela signifie que dans ce cas, le code devrait supprimer les deux premières lignes du fichier.

J’ai essayé avec sed et grep, mais je ne pouvais pas le faire fonctionner.

Merci d’avance pour toute idée.

Vous pouvez utiliser awk :

 awk -F- '$4 > 198000 {print}' filename 

Cela affichera toutes les lignes où la deuxième date est postérieure au 31/12/1979. Cela n’éditera pas le fichier sur place, vous devrez enregistrer la sortie dans un autre fichier, puis le déplacer à la place de l’original:

 awk -F- '$4 > 198000 {print}' filename > tmp && mv tmp filename 

Utiliser sed (éditera sur place):

 sed -i '/.*19[0-7][0-9]..\.nc/d' filename 

Cela demande un peu plus de reflection, dans la mesure où vous devrez construire une expression régulière pour correspondre aux valeurs que vous ne souhaitez pas afficher.

Peut-être quelque chose comme ça:

 awk -F- '{ if (substr($4,1,4) >= 1980) print }' input.txt