comando awk
Ejemplo 1? Índice
El contenido del archivo a.txt es el siguiente:
El archivo b.txt es el siguiente
Ejecute el comando:
awk 'NR==FNR{a[$1]=$2}NR!=FNR{if($1 in a) print $1, a[$1], $2 else print; $1, 0, $2}' a. txt b.txt
Resultado de salida:
Explicación del parámetro:
awk 'NR==FNR{a[$1 ]=$2}NR!=FNR{ if($1 en a) imprime $1, a[$1], $2; de lo contrario imprime $1, 0, $2}' a.txt b.txt
NR== FNR{a[$1]=$2} ?: NR==FNR determina si es el primer archivo. Si es el primer archivo, realice la operación {a[$1]=$2} y use la primera columna de a. txt como clave y la segunda columna como valor para generar el índice a. El resultado después de ejecutar este paso probablemente sea a={'20000401':'100000999', '20100503':'100000888'} (en realidad no es una estructura json)
NR!=FNR{if ($1 en a) imprimir $1, a[$1], $2; de lo contrario, imprimir $1, 0, $2}: si no es el primer archivo, en este ejemplo se refiere a b.txt. En este comando, $1 y $2 son ambos b. La lógica de la primera y segunda columnas del .txt es demasiado simple de explicar.
Ejemplo 2. Estadísticas
awk '{if (($3 >= 10 ) && ($3 < 20)) _cnt_1=1 else _cnt_2=1} END {print _cnt_10, _cnt_20}' res.txt
awk '{if (($3 >= 10 ) && ($3 < 20)) {_cnt_1=1} else if($3>=0 && $3<10) {_cnt_1+ =1} else {_cnt_2=1}} END {print _cnt_1,_cnt_10, _cnt_20}' res.txt
Resultado:
Los principios de los dos ejemplos de estadísticas de rango anteriores no son difícil. La razón principal es que la sintaxis es difícil de recordar. Cabe señalar que en mi computadora portátil Mac, no puedo usar elif para informar errores de sintaxis. Solo puedo usar else si no sé qué está pasando.