Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

230
Vistas
redirigir a una variable que almacena awk en bash
cat list.txt

1 apple 4 30 f 2 potato 2 40 v 3 orange 5 10 f 4 grapes 10 8 f

Guión: obtener lista ::

 if [[ "$@" == *[f]* ]] ; then awkv1 = $(grep f | awk '{ print $2 $3 }') else awkv1 = $(awk '{ print $2 $4 $5 }') fi cat list.txt | $(awkv1)

Tengo una variable awkv1 que almacena valor según el argumento 'f'. Pero no está funcionando . Ejecutar :: getlist f no hace nada.

Debería funcionar así :: Si se pasa 'f' en el argumento, entonces :: cat list.txt | grep f | awk '{ print $2 $3 }'

de lo contrario :: cat list.txt | awk '{ print $2 $4 $5 }'

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hay algunas correcciones que debe realizar en su secuencia de comandos:

  1. Eliminar espacios de awkv1 = $
  2. En lugar de grep f use grep 'f$' . Este enfoque hace coincidir el carácter f solo en la última columna y evita que las frutas con la letra f , por ejemplo, fig , coincidan cuando la última columna termina con v.
  3. Reemplazar cat list.txt | $(awkv1) por echo "$awkv1" ya que la salida del comando anterior ya está almacenada en la variable $awkv1 .

La versión corregida del script:

 if [[ "$@" == *[f]* ]] ; then awkv1=$(grep 'f$' | awk '{ print $2, $3 }') else awkv1=$(awk '{ print $2, $4, $5 }') fi echo "$awkv1"

Puede invocar este script de esta manera: cat list.txt | getlist f

over 4 years ago · Santiago Trujillo Denunciar

0

¿Por qué no hacer algo como:

Archivo: getlist

 #!/bin/sh if [ "$1" = "f" ]; then awk '$5=="f"{print $2,$3}' list.txt else awk '{print $2,$4,$5}' list.txt fi

Si este archivo es ejecutable, puede llamarlo así:

 $ ./getlist f apple 4 orange 5 grapes 10 $ ./getlist apple 30 f potato 40 v orange 10 f grapes 8 f $

O si desea especificar el valor de búsqueda en la línea de comando:

 #!/bin/sh if [ "$1" ]; then awk -vt="$1" '$5==t{print $2,$3}' list.txt else awk '{print $2,$4,$5}' list.txt fi

De esta manera, puede enumerar los campos etiquetados como f o v :

 $ ./getlist apple 30 f potato 40 v orange 10 f grapes 8 f $ ./getlist f apple 4 orange 5 grapes 10 $ ./getlist v potato 2 $
over 4 years ago · Santiago Trujillo Denunciar

0

Almacenar una línea de comando parcial en una variable de cadena es propenso a errores, es mejor usar matrices bash.

Puedes modificar tu script de esta manera:

 #!/bin/bash # store awk command line in an array if [[ "$*" == *f* ]]; then awkcmd=(awk '/f/{ print $2, $3 }') else awkcmd=(awk '{ print $2, $4, $5 }') fi # execute your awk command "${awkcmd[@]}" list.txt
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda