usando gawk in uno script di shell
Domanda
Voglio fare qualcosa del genere:
for i in 1 2 3
do
gawk '{if ($i==$2) {print <*>;}}' filename
done
è possibile?
grazie
Soluzione
Mi vengono in mente due possibili interpretazioni della tua sceneggiatura:
- In realtà vuoi cercare "1", "2", quindi "3" come secondo campo in
filename
- In realtà vuoi cercare il primo parametro dello script della shell, quindi il secondo, ...
Ecco entrambe le versioni del loop:
for i in 1 2 3; do
gawk "{if (\"$i\"==\$2) {print \<*>;}}" filename
done
for i in "$@"; do
gawk "{if (\"$i\"==\$2) {print \<*>;}}" filename
done
Altri suggerimenti
Per evitare brutte citazioni, puoi usare la funzione di passaggio variabile di gawk:
for i in 1 2 3
do
gawk -v param=$i '{if (param==$2) {print <*>}}' filename
done
Supponendo che si desideri che lo script gawk sia
{if ($1 == $2 ) ... } {if ($2 == $2 ) ... } {if ($3 == $2 ) ... }
puoi fare:
for i in 1 2 3 do gawk '{if ($i'==$2) {print <*>;}}' filename done
Beh, certo, è possibile, ma probabilmente non farà ciò che vuoi che faccia.
... vieni a pensarci, cosa fai che vuoi che faccia? Non è molto chiaro da quello che hai scritto. Una cosa che probabilmente dovrai cambiare è sostituire le virgolette singole con virgolette doppie perché le variabili (come $ i
) non vengono sostituite in stringhe tra virgolette singole.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow