Tengo algunos archivos de texto como se muestra a continuación. Me gustaría restar los valores de la columna 2 y 4, y la necesidad de crear una nueva columna a la salida.

co1  co2   co3    co4

r1  15.2  13.0   21.4
r2  23    15     15.7
r3  14    8      12

de salida deseado

co1  co2   co3   co4   diff.    

r1  15.2  13.0   21.4   -6.2
r2  23    15     15.7   7.3
r3  14    8      12     2
InformationsquelleAutor user1606717 | 2012-08-17

3 Comentarios

  1. 10

    Nota: Usted podría poner el awk todos los comandos en una sola línea, pero esto es más ordenado (además de más transparente y más fácil de modificar si es necesario).

    Este so.awk guión:

    NR==1{print $0, "   diff.\n"}
    NR>2{printf("%s\t%5.1f\n", $0, $2-$4)}

    da:

    co1  co2   co3   co4     diff.
    
    r1  15.2  13.0   21.4    -6.2
    r2  23    15     15.7     7.3
    r3  14    8      12       2.0

    Dado sus datos en el archivo data.txt emitir este comando:

     awk -f so.awk data.txt

    (Puede que tenga que ajustar el formato para que se ajuste a sus necesidades exactas)

  2. 9

    Este one-liner obras:

    awk 'NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt

    Da:

    co1 co2 co3 co4 diff.
    
    r1 15.2 13.0 21.4 -6.2
    r2 23 15 15.7 7.3
    r3 14 8 12 2

    Si quieres campos separados por tabuladores, este es el wat desea:

    awk 'BEGIN { OFS = "\t" } NR == 1 { $5 = "diff." } NR >= 3 { $5 = $2 - $4 } 1' <input.txt
  3. 4

    El one-liner por Taku Miyakawa puede ser simplificado si usted no tiene un encabezado:

    awk '{ $5 = $2 - $4 } 1' input.txt > inputdiff.txt

    O con ficha de separación:

    awk 'BEGIN { OFS = "\t" } { $5 = $2 - $4 } 1' input.txt > inputdiff.txt

Dejar respuesta

Please enter your comment!
Please enter your name here