He intentado esto desde mi script de shell y el resultado no fue el destinadouso variable de fiesta desde dentro AWK
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
Se No se encontró $ REF incluso con el texto que contenía
Suggest!
He intentado esto desde mi script de shell y el resultado no fue el destinadouso variable de fiesta desde dentro AWK
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
Se No se encontró $ REF incluso con el texto que contenía
Suggest!
Usted cuestión está redactada realmente pobres ...
De todos modos, creo que usted quiere esto:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/{print \$2}"
Nota del escape de $2
y las comillas dobles.
o esto:
REF=SEARCH_TEXT
echo "some text" | awk "/$REF/"'{print $2}'
Nota el uso juicioso de comillas dobles e individuales y hay escape de $2
.
usted tiene que utilizar el desarrollo del forro, ya que de lo contrario se abarcaría la exportación de una variable de shell y el uso del ambiente con awk - que es exageración en esta situación:
export REF=SEARCH_TEXT
echo "some text" | awk '{if (match($0, ENVIRON["REF"])) print $2}'
creo AWK no admite variables en /.../ guardias. Por favor corrígeme si me equivoco.
$ 2 funciona bien con y sin el \. La pregunta es sobre $ REF, que no es gastado por awk. thx – vehomzzz
@Fritschy: Para muchas personas que usan Internet, el inglés no es su primer idioma; algunas personas usan Google para traducir su pregunta. ;-) –
vehomzzz, al usar comillas dobles - que fue lo que sugerí en roder para permitir que el shell expanda '$ REF' correctamente, tienes que escapar' $ 2' - para evitar que el shell lo expanda. –
en lugar de citar juegos en la cáscara, utilice la opción -v
para pasar la variable shell como una variable awk:
awk -v ref="$REF" 'match($0, ref) {print $2}'
Si $REF
es sólo texto y no una expresión regular, utilice la función index()
vez de match()
.
Interesante, Glenn. Gracias por compartir. –
+1 - '-v' es la forma correcta de hacerlo. –
¿Podría por favor aconsejarme cómo hacer esto en mi caso? izquierda = 1; derecha = 4; grep ETM21CH01EPU3Z -A1 SLf_454.fna | cola -n 1 | awk '{print substr ($ 0,1,4)}' funciona y genera GTTG, pero la versión con variables no, gracias: left = 1; derecha = 4; grep ETM21CH01EPU3Z -A1 SLf_454.fna | cola -n 1 | awk -v l = "$ left" r = "$ right" '{print substr ($ 0, l, r)}' awk: cmd. línea: 1: fatal: no se puede abrir el archivo '{print substr ($ 0, l, r)} 'para leer – Perlnika
En gawk
, tiene la matriz ENVIRON
, p. Ej. awk 'END{print ENVIRON["REF"]}' /dev/null
imprimirá su variable si ha export
editado desde el shell para subprocesos.
Esto también funciona (y la variable no tiene que ser exportada si 'REF = value awk' ... ''). Pero recomendaría el interruptor '-v' como la solución general. – dubiousjim
posible duplicado de [pasar una variable de script de shell en un comando awk] (http://superuser.com/questions/203819/passing-a-shell-script-variable-into-an-awk-command) – ephemient