Tengo un archivo de entrada de archivo cuyo contenido se actualiza constantemente
con diferentes número de campos, lo que estoy tratando es para imprimir en un archivo nuevo
el siguiente al último campo de cada línea del archivo de entrada:
awk ‘{print $(NF-1)}’ outputfile

de error:
y
awk: (FILENAME=- FNR=2) fatal: intento de acceso a campo -1

Necesita ayuda. Gracias de antemano

InformationsquelleAutor Zerg12 | 2013-03-27

3 Comentarios

  1. 6

    En las líneas con ningún campo (líneas en blanco, o todos los espacios en blanco) NF es 0, por lo que se evalúa a $(-1). También si sólo hay un campo el código de impresión $0 que puede no ser lo que usted desea.

    awk 'NF>=2 {print $(NF-1)}'
  2. 3

    Debe ser awk 'NF > 1 { print $(NF - 1); }'

    awk 'NF { print $(NF - 1) }' no es correcto. Cuando NF == 1 va a imprimir $0 que no es siguiente a la última campo.

    • +1 para la solución, pero pierde la instrucción nula (al final semi-colon)
    • ¿Qué significa «, pero pierde la instrucción nula (al final semi-colon)»?
    • El punto y coma después de la declaración de print $(NF - 1) introduce una posterior declaración en la que está vacío o nulo. Acaba de deshacerse de la semi-colon y que se soluciona el problema, es decir, el uso de { print $(NF - 1) } no { print $(NF - 1); }.
    • Ese es mi estilo. Me gustaría hacer que se vea más como una declaración. 🙂
    • Bueno, supongo que hay cosas peores que usted puede hacer que agregar espurias semi-coma a su código y no creo que haya ninguna funcional de la rotura debido a ella. No estoy seguro de que entender la atracción, aunque, para ser honesto, y cuando veo que en una secuencia de comandos que siempre me lleva un poco más de tiempo leyendo el código de convencerme de que es verdad, el no hacer nada no es evidente por lo que obtener molestos por ello, pero que podría ser yo…
    • Para aclarar el motivo por el que me hace perder el tiempo y frustrado cuando veo espurias semi-coma – hay una enorme diferencia entre lo que estos 2 que las declaraciones de hacer: x > y { print } y x > y; { print; }. Del mismo modo para {x = a b} y {x = a; b;}. Así que cuando usted lanza en semi-coma con la intención de no hacer nada, mi idea inicial es averiguar qué es lo que ESTÁN haciendo desde la colocación de los signos de punto y coma a menudo tiene un gran impacto en su programa y luego, cuando volví a convencer a mí mismo que no hacer nada y que es una «opción de estilo» en su lugar, a continuación, la molestia sigue….

  3. -1

    otro awk línea: (golf un poco):

    awk 'NF>1&&$0=$(NF-1)' 
    • Funciona? echo foo | awk 'NF && $0 = $(NF-1)' salidas foo.
    • ur derecho. debe ser nf>1. fijo

Dejar respuesta

Please enter your comment!
Please enter your name here