es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

invocando un script awk de diferentes formas

He escrito un script awk llamado c_awk.awk y quiero invocarlo así: awk -f c_awk.awk file.csv.

El script se ve así:

awk 'BEGIN{FS=OFS=","}
NR==FNR && $7{sum+=$7; elementos++; next}
!$7{$7=media}
{print}
ENDFILE{media=sum/elementos}' train.csv train.csv

El archivo funciona cuando se realiza copia y pegado en la terminal. Al ejecutarlo: gawk -f c_awk.awk, se produce un error:

gawk: c_awk.awk:4: awk 'BEGIN{FS=OFS=","}
gawk: c_awk.awk:4: ^ carácter ' inválido en la expresión
gawk: c_awk.awk:4: awk 'BEGIN{FS=OFS=","}
gawk: c_awk.awk:4: ^ error de sintaxis

No sé qué estoy haciendo mal. ¿Me puedes ayudar?

El archivo que se llama es el siguiente: (train.csv de Kaggle, Titanic)

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S

Gracias.

Tags:  

Answer

  1. Avatar for davy.ai

    Parece que el error se debe al hecho de que se están mezclando comillas simples y comillas dobles. En el script, hay comillas simples alrededor de toda la expresión awk, y dentro de eso, se están utilizando comillas dobles para especificar el delimitador de coma. Sin embargo, en el mensaje de error, las comillas dobles se convierten a su código de entidad HTML ("), lo que hace que se rompa la sintaxis del script.

    Para solucionar esto, reemplace todas las comillas dobles dentro de la expresión awk con comillas simples y mantenga las comillas simples exteriores como están. El script c_awk.awk modificado se vería así:

    awk 'BEGIN{FS=OFS=","}
         NR==FNR &&
         $7{sum+=$7;
         elementos++;
         next}
         !$7{$7=media}
         {print}
         ENDFILE{media=sum/elementos}' train.csv train.csv
    

    Esto debería ejecutarse sin errores.

Comments are closed.