Je dois supprimer chaque ligne qui a une valeur de 2 ou moins dans le 8ème champ (colonne).
Mes données ressemblent à ceci:
12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8
01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1
01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4
01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6
Je comprends qu'en utilisant awk, je peux supprimer les valeurs souhaitées et les imprimer dans un autre fichier, et je comprends que sed modifierait le fichier actuel. Dans les deux cas, je dois conserver le fichier d'origine.
Remarque: veuillez fournir des explications détaillées avec vos solutions. Il ne suffit pas d'écrire simplement la commande, veuillez annoter les suggestions.
Note supplémentaire: Les données ont une ligne d'en-tête, donc la solution la plus probable devra
awk 'FNR> 1'
Je suppose?
Vous l'avez presque compris.
awk '(NR>1) && ($8 > 2 ) ' foo > bar
où
NR
est le numéro d'enregistrement (c'est-à-dire le nombre de lignes)$8
est huit champs&&
est logique etfoo
est le fichier d'origine, inchangébar
fichier résultantNotez que l'en-tête est rayé de foo à bar, pour le garder
awk '(NR==1) || ($8 > 2 ) ' foo > bar
où
||
est logique ouPour spécifier une plage
( ($8 >= -4) && ( $8 <= 4 ) )
8ème champ de -4 à 4(NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) )
idem, y compris en-tête