Tengo una entrada contiene de 36 líneas como esta:

822
526006
1343315205
1.4.2
32
0.000000
13.048815
...
0
0
0

Que es la salida de memcache stats. Así que no es de un archivo. ¿Cómo puedo convertir estas líneas en una de las columnas de una sola fila. No quiero utilizar los archivos temporales.

Gracias,

InformationsquelleAutor Sean Nguyen | 2012-07-26

6 Comentarios

  1. 9

    Intente esto:

    awk '{printf("%s ", $0)}'

    el uso de un tubo:

    whatever_your_command | awk '{printf("%s ", $0)}'

    La ventaja de usar printf() es que te da un completo control sobre el formato de salida/distancia/etc de sus datos.

    Pruebas

    822
    526006
    1343315205
    1.4.2
    32
    0.000000
    13.048815

    de datos en el archivo data.txt:

    awk '{printf("%s ", $0)}' data.txt

    rendimientos:

    822 526006 1343315205 1.4.2 32 0.000000 13.048815 
    • es extraño que el anterior tubo da a los números como números, no de la cadena. Así que tengo que hacer «%d» en lugar de %s para conseguir que funcione. Así que mi último comando se parece a: echo «estadísticas» | nc 10.34.10.38 11211 | awk ‘{printf(«%d «,$3)} END {print «»}’
    • Gracias por los comentarios, me alegro de que eran capaces de hacer el ajuste necesario para que esta solución funcione.
    • data.txt |xargs’ también va a hacer el truco supongo
  2. 5

    Usted puede hacer esto sin awk:

    tr '\n' ' ' < file
    echo $(<file)
    xargs echo < file
    perl -pe 's/\n//' < file

    Ejemplo:

    $ tr '\n' ' ' < data.txt
    822 526006 1343315205 1.4.2 32 0.000000 13.048815
    $ echo $(<data.txt)
    822 526006 1343315205 1.4.2 32 0.000000 13.048815
    $ xargs echo < data.txt
    822 526006 1343315205 1.4.2 32 0.000000 13.048815
    $ perl -pe 's/\n//' < data.txt
    822 526006 1343315205 1.4.2 32 0.000000 13.048815
  3. 2

    Puede ser un único carácter awk programa

    seq 10 | awk -v ORS=" " 1
    • +1 para el idiomáticas awk solución.
    • ¿Cómo funciona esto?
  4. 0

    En bash, se puede usar algo como esto.

    input="822
    526006
    1343315205
    1.4.2
    32
    0.000000
    13.048815"

    A continuación, utilizar un simple bucle for.

    for row in $(echo "$input");do echo -en "$row ";done;echo

    Salidas

    822 526006 1343315205 1.4.2 32 0.000000 13.048815

    Que la última eco es para evitar que su mensaje en la misma línea, quitar si utilizas esta en una secuencia de comandos en consecuencia.

Dejar respuesta

Please enter your comment!
Please enter your name here