Question

Dans ce script, je veux qu'awk imprime les variables $ fichier , $ f , $ order et sum / NR (tous sur une seule ligne)

#!/bin/bash
for file in pmb_mpi tau xhpl mpi_tile_io fftw ; do
    for f in 2.54 1.60 800 ;do
    if [ ${f} = 2.54 ]
    then 
        for order in even odd ; do
#       echo ${file}_${f}_${order}_v1.xls >> P-state-summary.xls
        awk '{sum+=$2} END {print ${file}_${f}_${order}_v1.xls, sum/NR}' ${file}_${f}_${order}_v1.xls >> P-state-summary.xls
        done
    else
#       echo ${file}_${f}_v1.xls >>  P-state-summary.xls
        awk '{sum+=$2} END {print  ${file}_${f}_v1.xls , sum/NR}' ${file}_${f}_v1.xls >>  P-state-summary.xls
    fi
    done
done

Quelqu'un parmi vous a-t-il eu l'amabilité de m'aider?

Était-ce utile?

La solution

Vous pouvez faire ceci:

echo -n "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
# or printf "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
awk '{sum+=$2} END {print sum/NR}' "${file}_${f}_${order}_v1.xls" | 
    tee "${file}_${f}_avrg.xls" >> P-state-summary.xls

Utilisation de echo -n ou de printf sans un " \ n " affichera le texte sans nouvelle ligne afin que la sortie de la commande awk le suive sur la même ligne. J'ai ajouté un espace en tant que séparateur, mais vous pouvez utiliser n'importe quoi.

L'utilisation de tee vous permettra d'écrire votre sortie dans les fichiers individuels et dans le fichier de résumé à l'aide d'un seul appel awk par fichier d'entrée (ordre).

Autres conseils

awk ne récupère pas les variables shell, vous devez les transmettre en tant que variables awk :

pax> export x=XX
pax> export y=YY
pax> awk 'BEGIN{print x "_" y}'
_
pax> awk -vx=$x -v y=$y 'BEGIN{print x "_" y}'
XX_YY

Il existe un autre moyen de le faire en utilisant des guillemets doubles au lieu de guillemets simples (pour que bash substitue les valeurs avant que awk ne les voie), mais vous devez ensuite commencez à échapper aux symboles $ et à toutes sortes d'autres choses dans votre commande awk :

pax> awk "BEGIN {print \"${x}_${y}\"}"
XX_YY

Je préfère utiliser la création de variables explicites.

En passant, il existe une autre solution à votre précédente question connexe ici qui devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top