2012-04-03 5 views
17

Je convertis un fichier CSV dans un format de table, et j'ai écrit un script AWK et l'ai enregistré sous le nom my.awk. Voici mon script:Comment ouvrir un fichier .awk?

#AWK for test 
awk -F , ' 
    BEGIN { 
     aa = 0; 
    } 
    { 
     hdng = "fname,lname,salary,city"; 
     l1 = length($1); 
     l13 = length($13); 
     if ((l1 > 2) && (l13 == 0)) { 
      fname = substr($1, 2, 1); 
      l1 = length($3) - 4; 
      lname = substr($3, l1, 4); 
      processor = substr($1, 2); 
      #printf("%s,%s,%s,%s\n", fname, lname, salary, $0); 
     } 

     if ($0 ~ ",,,,") 
      aa++ 
     else if ($0 ~ ",fname") 
      printf("%s\n", hdng); 
     else if ((l1 > 2) && (l13 == 0)) { 
      a++; 
     } 
     else { 
      perf = $11; 
      if (perf ~/^[0-9\.\" ]+$/) 
       type = "num" 
      else 
       type = "char"; 
      if (type == "num") 
       printf("Mr%s,%s,%s,%s,,N,N,,\n", $0,fname,lname, city); 
     } 
    } 
    END { 
    } ' <life.csv> life_out.csv* 

Comment puis-je exécuter ce script sur un serveur Unix? J'ai essayé d'exécuter ce fichier my.awk en utilisant cette commande:

awk -f my.awk life.csv 

Répondre

22

Le fichier que vous donnez est un script shell , pas un programme awk. Donc, essayez sh my.awk.

Si vous souhaitez utiliser awk -f my.awk life.csv > life_out.cs, puis retirez awk -F , ' et la dernière ligne du fichier et ajoutez FS="," dans BEGIN.

+0

pouvez-vous la sortie de la conduite de quelque chose comme 'queue -f' dans un script shell' awk'? Donc, je pourrais terminer un fichier journal puis faire un peu de traitement avec awk puis le sortir à l'écran? –

+0

En fait, il semble que la réponse stoggy ci-dessous est ce que je cherche. –

10

Placez la pièce de BEGIN....END{} dans un fichier et nommez-la comme my.awk.

Et puis l'exécuter comme ci-dessous:

awk -f my.awk life.csv >output.txt 

Aussi je vois un séparateur de champ comme ,. Vous pouvez ajouter que dans le comme FS=","

11

début du bloc du fichier .awk Si vous mettez #!/bin/awk -f sur la première ligne de votre script AWK il est plus facile. Plus alors les éditeurs comme Vim et ... reconnaîtront le fichier comme un script AWK et vous pouvez colorier. :)

#!/bin/awk -f 
BEGIN {} # Begin section 
{}  # Loop section 
END{}  # End section 

Ensuite, vous pouvez appeler votre script AWK comme ceci:

`$ echo "something" | ./awk-script`