Estoy tratando de entender cuál es la diferencia entre dos comandos (yo estaba esperando el mismo resultado a partir de los dos):

Caso-Me

echo 'one,two,three,four,five' |awk -v FS=,  '{NF=3}1'
one two three

Caso-II

echo 'one,two,three,four,five' |awk -v FS=,  -v NF=3 '{$1=$1}1'
one two three four five

Aquí está mi comprensión actual:
$1=$1 se utiliza para la fuerza de awk para la reconstrucción y el uso de las variables definidas. Yo soy la asignación de FS como -v FS="," que es, en efecto, a diferencia de -v NF=3 .

Pregunta: ¿por Qué NF=3 no está teniendo efecto en el que como FS=, hace.

InformationsquelleAutor monk | 2017-11-10

3 Comentarios

  1. 3

    https://www.gnu.org/software/gawk/manual/gawk.html#Options:

    -v var=val

    –asignar var=val

    Establecer la variable var para el valor val antes de la ejecución del programa comienza.

    https://www.gnu.org/software/gawk/manual/gawk.html#Fields:

    NF es una variable predefinida cuyo valor es el número de campos en el registro actual. awk automáticamente se actualiza el valor de NF cada vez que se lee un registro.

    En su primer programa, ejecutar {NF=3} después de cada línea se lee, sobrescribiendo NF.

    En su segundo programa, inicialmente se establece NF=3 a través de -v, pero ese valor se sobrescribe con awk cuando la primera línea de la entrada es de lectura.

    FS es diferente porque awk nunca se establece esta variable. Se mantendrá el valor que le dan.

  2. 2

    NF es una variable predefinida cuyo valor es el número de campos en el registro actual. awk automáticamente se actualiza el valor de NF cada vez que se lee un registro.

    Recuerde : siempre awk lee registro/línea/fila, awk analizará los campos
    separador de campo FS (por defecto solo espacio), y se vuelve a recalcular los campos
    y actualización de la misma en la variable NF.

    Por lo tanto, por debajo de uno no funciona.

    ¿Por qué no funciona ?

    1. Definido NF, que es antes de la ejecución del programa de
    2. awk registro lectura/línea/fila, analiza los campos, se recalculan los campos, por lo que la variable NF sobrescrito.

    caso – 1 :

    echo 'one,two,three,four,five' |awk -v FS=,  -v NF=3 '{$1=$1}1'
    one two three four five

    ¿Por qué funciona esto ?

    1. awk registro lectura/línea/fila, analiza campos, campos calculados, NF será de 5
    2. que haya sobreescrito variable NF

    caso -2 :

    echo 'one,two,three,four,five' |awk -v FS=,  '{   NF=3  }1'
    one two three
                                                      ^
                                            Because you have overwritten variable
    
    
    
    $ echo 'one,two,three,four,five' |awk -v FS=,  '{print "Before:"NF;  NF=3; print "After:"NF}1'
    Before:5
    After:3
    one two three
  3. 0

    Se podría decir que es porque NF se menciona como una variable en awk en el 2º caso, por lo que no es capaz de re-tamaño haciendo $1=$1.

    Usted podría tratar de seguir y se debe trabajar si usted desea tomar los campos de una variable.

    echo 'one,two,three,four,five' |awk -v FS=, -v nf=3 '{NF=nf;}1'

Dejar respuesta

Please enter your comment!
Please enter your name here