Soy nuevo shell scripting y parecen no comprender esta simple tarea. Tengo un archivo de texto (ciphers.txt alrededor de 250 líneas, y me gustaría usar la primera columna de cada línea como un argumento en la línea de comandos. Cualquier ayuda sería muy apreciada!

el comando es:

openssl s_client -connect host:port -cipher argument

Funciona bien cuando tengo que hacer de una en una, pero yo realmente no desea ejecutar el mismo comando de 250 veces. Aquí está mi script hasta ahora:

awk '{command = "openssl s_client -connect localhost:4433 -cipher > results.txt"
print $0 | command}' ciphers.txt

Sigo recibiendo un error, por lo que estoy bastante seguro de que tengo un error de sintaxis en algún lugar. Es el resultado de awk se anexa después -de cifrado?

InformationsquelleAutor nLee | 2013-12-05

3 Comentarios

  1. 65

    Uso system desde dentro de awk:

    awk '{ system("openssl s_client -connect host:port -cipher " $1) }' ciphers.txt
  2. 10

    hay bastantes cosas mal con su comando. Para el que quiera usar la primera columna. Que se conoce como $1 en awk y no $0 (lo que sería la línea entera). Segundo, se le olvidó un punto y coma al final de su definición de comando.

    Que en realidad ejecute el comando se puede utilizar system() o un tubo (el último sólo tiene sentido si el comando se puede leer desde la entrada estándar stdin, que openssl en tu caso no, creo).
    La más sencilla sería algo así como

    awk '{cmd="openssl s_client -connect host:port -cipher" $1; system(cmd)}' results.txt

    Nota, que esto sólo va a devolver el estado de salida. Si usted necesita para capturar stdout, usted tendrá que tubo el comando a través de getline.

    Andreas

    PS: la Publicación de el error real que tienes, habría ayudado.

  3. 9

    La xargs comando es específicamente para el caso de uso.

    awk '{print $0}' <ciphers.txt | xargs -I{} openssl s_client -connect host:port -cipher {} >>results.txt

    Esta versión es un poco más de tiempo para el caso de ejemplo porque awk ya estaba siendo utilizado para analizar $0. Sin embargo, xargs viene en práctico cuando usted ya tiene una lista de cosas para su uso y no se están ejecutando algo que se puede ejecutar una subshell. Por ejemplo, awk podría ser utilizado a continuación para ejecutar el mv pero xargs es mucho más sencillo.

    ls -1 *.txt | xargs -I{} mv "{}" "{}.$(date '+%y%m%d')"

    El anterior comando cambia el nombre de cada archivo de texto en el directorio actual a una sellada con la fecha de copia de seguridad. El equivalente en awk requiere la toma de una variable de los resultados de la date comando, que pasa que en awk y, a continuación, construir y ejecutar el comando.

    La xargs comando también se puede acumular múltiples parámetros en una sola línea, lo cual es útil si la entrada tiene varias columnas, o cuando un solo registro se divide en recurrentes de los grupos en el archivo de entrada.

    Para obtener más información sobre todas las formas de uso, eche un vistazo a «xargs» All-IN-One Guía Tutorial más en UNIX Mantra.

Dejar respuesta

Please enter your comment!
Please enter your name here