J'ai un fichier .CSV avec le format ci-dessous:
"column 1","column 2","column 3","column 4","column 5","column 6","column 7","column 8","column 9","column 10
"12310","42324564756","a simple string with a , comma","string with or, without commas","string 1","USD","12","70%","08/01/2013",""
"23455","12312255564","string, with, multiple, commas","string with or, without commas","string 2","USD","433","70%","07/15/2013",""
"23525","74535243123","string , with commas, and - hypens and: semicolans","string with or, without commas","string 1","CAND","744","70%","05/06/2013",""
"46476","15467534544","lengthy string, with commas, multiple: colans","string with or, without commas","string 2","CAND","388","70%","09/21/2013",""
La 5e colonne du fichier a différentes chaînes. J'ai besoin de filtrer le fichier en fonction de la valeur de la 5ème colonne. Disons que j'ai besoin d'un nouveau fichier du fichier actuel qui n'a que des enregistrements avec la valeur "chaîne 1" dans son cinquième champ.
Pour cela, j'ai essayé la commande ci-dessous,
awk -F"," ' { if toupper($5) == "STRING 1") PRINT }' file1.csv > file2.csv
mais il me jetait une erreur comme suit:
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
J'ai ensuite utilisé ce qui suit, ce qui me donne une sortie étrange.
awk -F"," '$5="string 1" {print}' file1.csv > file2.csv
Production:
"column 1" "column 2" "column 3" "column 4" string 1 "column 6" "column 7" "column 8" "column 9" "column 10
"12310" "42324564756" "a simple string with a comma" string 1 without commas" "string 1" "USD" "12" "70%" "08/01/2013" ""
"23455" "12312255564" "string with string 1 commas" "string with or without commas" "string 2" "USD" "433" "70%" "07/15/2013" ""
"23525" "74535243123" "string with commas string 1 "string with or without commas" "string 1" "CAND" "744" "70%" "05/06/2013" ""
"46476" "15467534544" "lengthy string with commas string 1 "string with or without commas" "string 2" "CAND" "388" "70%" "09/21/2013" ""
PS: J'ai utilisé la commande toupper pour être du bon côté, car je ne suis pas sûr que la chaîne soit en minuscule ou en majuscule. J'ai besoin de savoir ce qui ne va pas avec mon code et si l'espace dans la chaîne compte lors de la recherche d'un modèle à l'aide d'AWK.
'","'
comme délimiteur, sinon cela aurait résolu mon problème ... excellente solution ...