Domanda

In questo script, voglio che awk stampi le variabili $ file , $ f , $ order e sum / NR (tutto in una sola riga)

#!/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

Colud qualcuno di voi gentilmente mi aiuti in questo?

È stato utile?

Soluzione

Puoi farlo:

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

Uso di echo -n o printf senza " \ n " produrrà il testo senza una nuova riga, quindi l'output del comando awk lo seguirà sulla stessa riga. Ho aggiunto uno spazio come separatore, ma potresti usare qualsiasi cosa.

L'utilizzo di tee ti consentirà di scrivere l'output nei singoli file e nel file di riepilogo utilizzando solo un awk invocazione per file di input (ordine).

Altri suggerimenti

awk non esce e ottieni variabili shell per te, devi passarle come variabili 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

C'è un altro modo di farlo usando le virgolette doppie anziché le virgolette singole (in modo che bash sostituisca i valori prima che awk li veda), ma poi devi inizia a scappare dai simboli $ e da ogni altra cosa nel tuo comando awk :

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

Preferisco usare la creazione di variabili esplicite.

A proposito, c'è un'altra soluzione alla tua precedente domanda correlata qui che dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top