J'ai un gros fichier csv, qui ressemble à ceci:
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,25178
1,2,3,4,5,6,27986
1,2,3,4,5,6,-99
Je veux sélectionner uniquement les lignes dans lesquelles la 7e colonne est égale à -99, donc ma sortie sera:
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
J'ai essayé ce qui suit:
awk -F, '$7 == -99' input.txt > output.txt
awk -F, '{ if ($7 == -99) print $1,$2,$3,$4,$5,$6,$7 }' input.txt > output.txt
Mais les deux ont renvoyé un output.txt vide. Quelqu'un peut-il me dire ce que je fais mal? Merci.
Le fichier sur lequel vous exécutez le script a des fins de ligne DOS. Il se peut qu'il ait été créé sur une machine Windows.
Utilisation dos2unix
pour le convertir en fichier texte Unix.
Vous pouvez également l'exécuter via tr
:
tr -d '\r' <input.txt >input-unix.txt
Utilisez ensuite input-unix.txt
avec votre code awk
par ailleurs correct.
Pour modifier le code awk
au lieu du fichier d'entrée:
awk -F, '$7 == "-99\r"' input.txt >output.txt
Cela prend en compte le retour chariot en fin de ligne.
Ou,
awk -F, '$7 + 0 == -99' input.txt >output.txt
Cela force la 7e colonne à être interprétée comme un nombre, ce qui "supprime" le retour chariot.
De même,
awk -F, 'int($7) == -99' input.txt >output.txt
supprimerait également le \r
.
awk -F, '{if($7==-99)print $0}'
fera cela...
Une légère modification de la réponse de @ tonioc
awk '{if($7 == -99){print}}' file > outfile
un peu tard pour la fête .. mais ça devrait le faire
awk -F, '$7 ~ /-99/' input.txt > output.txt
votre original fonctionnerait également si vous ajoutiez des guillemets, comme ça
awk -F, '$7 == "-99"' input.txt > output.txt
L'action par défaut lors de l'utilisation d'une correspondance de motif consiste à imprimer, donc {print}
ne sera pas nécessaire
awk -F',' '$7 ~ /-99/ {print $0}' filename.csv > result.csv
Veuillez noter que ','
définit votre séparateur comme une virgule.
$
définit la colonne. donc, $7
définit le numéro de colonne auquel vous souhaitez attribuer une valeur spéciale. ici 7
.
~ /-99/
recherche -99
. vous pourriez mettre tout ce dont vous avez besoin.
$0
représente TOUTES les colonnes du fichier. Vous pouvez simplement écrire $1","$2","......
si vous ne souhaitez pas imprimer uniquement des colonnes spécifiques. (ou $1$2...
si vous n'avez pas besoin de virgule comme séparateur pour vos résultats)
> result.csv
enregistre la sortie au lieu de l'imprimer dans le terminal dans result.scv
fichier.