J’ai donc un fichier que je voudrais seulement extraire de certaines lignes, mais malheureusement les chaînes de ces lignes ne sont pas entourées de guillemets. Comment puis-je filtrer ces lignes en fonction de la valeur de la 2ème colonne? Par exemple, j’ai:
ssortingng a,ssortingng b,ssortingng c,ssortingng d,ssortingng e ssortingng 1,ssortingng 2,ssortingng 3,ssortingng 4,ssortingng 5 ssortingng f,ssortingng b,ssortingng h,ssortingng i,ssortingng j ssortingng 6,ssortingng 7,ssortingng 8,ssortingng 9,ssortingng 0
Et je veux seulement dans un nouveau fichier:
ssortingng a,ssortingng b,ssortingng c,ssortingng d,ssortingng e ssortingng f,ssortingng b,ssortingng h,ssortingng i,ssortingng j
J’essaie d’utiliser la commande:
awk -F '","' 'BEGIN {OFS=","} { if (toupper($2) == "STRING B") print }' input.csv > output.csv
Vous n’avez pas besoin d’inclure des guillemets doubles pour définir la valeur FS.
$ awk -F, 'BEGIN {OFS=","} { if (toupper($2) == "STRING B") print }' file ssortingng a,ssortingng b,ssortingng c,ssortingng d,ssortingng e ssortingng f,ssortingng b,ssortingng h,ssortingng i,ssortingng j
Votre code devrait fonctionner si vous utilisez -F,
au lieu de -F '","'
. Une façon un peu plus idiomatique de faire la même chose est
awk -F, -v OFS=, 'toupper($2) == "STRING B"' input.csv
En code awk, une condition sans action associée signifie que l’action par défaut (impression) est exécutée si la condition est vraie, ce qui entraîne le même effet avec moins de peluches.