Buscar..


FS - Separador de campo

Usado por awk para dividir cada registro en múltiples campos:

echo "a-b-c
d-e-f" | awk 'BEGIN {FS="-"} {print $2}'

resultará en:

b
e

La variable FS también se puede configurar usando la opción -F :

echo "a-b-c
d-e-f" | awk -F '-' '{print $2}'

De forma predeterminada, los campos están separados por espacios en blanco (espacios y tabulaciones) y los espacios y tabulaciones múltiples cuentan como un solo separador.

RS - Separador de registros

Utilizado por awk para dividir la entrada en varios registros. Por ejemplo:

echo "a b c|d e f" | awk 'BEGIN {RS="|"} {print $0}'

produce:

a b c
d e f

Por defecto, el separador de registro es el carácter de nueva línea.

Similarmente: echo "abc | de f" | awk 'BEGIN {RS = "|"} {print $ 2}'

produce:

b
e

OFS - Separador de campo de salida

Utilizado por awk para separar los campos generados por la declaración de print . Por ejemplo:

echo "a b c
d e f" | awk 'BEGIN {OFS="-"} {print $2, $3}'

produce:

b-c
e-f

El valor predeterminado es , una cadena que consiste en un solo espacio.

ORS - Separador de registro de salida

Utilizado por awk para separar registros y se envía al final de cada declaración de print . Por ejemplo:

echo "a b c
d e f" | awk 'BEGIN {ORS="|"} {print $2, $3}'

produce:

b c|e f

El valor predeterminado es \n (carácter de nueva línea).

ARGV, ARGC - Array of Command Line Arguments

Los argumentos de línea de comando pasados ​​a awk se almacenan en la matriz interna ARGV de los elementos ARGC . El primer elemento de la matriz es el nombre del programa. Por ejemplo:

awk 'BEGIN {
   for (i = 0; i < ARGC; ++i) {
      printf "ARGV[%d]=\"%s\"\n", i, ARGV[i]
   }
}' arg1 arg2 arg3

produce:

ARGV[0]="awk"
ARGV[1]="arg1"
ARGV[2]="arg2"
ARGV[3]="arg3"

FS - Separador de campo

La variable FS se utiliza para establecer el separador de campo de entrada . En awk , el espacio y la pestaña actúan como separadores de campo predeterminados. Se puede acceder al valor del campo correspondiente a través de $1 , $2 , $3 ... y así sucesivamente.

awk -F'=' '{print $1}' file
  • -F - opción de línea de comando para configurar el separador de campo de entrada.
awk 'BEGIN { FS="=" } { print $1 }' file

OFS - Separador de campo de salida

Esta variable se utiliza para establecer el separador de campo de salida, que es un espacio por defecto.

awk -F'=' 'BEGIN { OFS=":" } { print $1 }' file

Ejemplo:

$ cat file.csv 
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5

$ awk -F',' 'BEGIN { OFS="|" } { $1=$1 } 1' file.csv
col1|col2|col3|col4
col1|col2|col3
col1|col2
col1
col1|col2|col3|col4|col5

Asignar $1 a $1 en $1=$1 modifica un campo ( $1 en este caso) y eso hace que awk reconstruya el registro $0 . La reconstrucción del registro reemplaza los delimitadores FS con OFS .

RS - Separador de registro de entrada

Esta variable se usa para establecer el separador de registro de entrada, por defecto una nueva línea.

awk 'BEGIN{RS=","} {print $0}' file

ORS - Separador de registro de salida

Esta variable se usa para establecer el separador de registro de salida, por defecto una nueva línea.

awk 'BEGIN{ORS=","} {print $0}' file

NF - Número de campos

Esta variable le dará un número total de campos en el registro de entrada actual.

awk -F',' '{print NF}' file.csv

Ejemplo:

$ cat file.csv 
col1,col2,col3,col4
col1,col2,col3
col1,col2
col1
col1,col2,col3,col4,col5
 
$ awk -F',' '{print NF}' file.csv 
4
3
2
1
5

NR - Número total de registros

Proporcionará el número total de registros procesados ​​en la instancia actual de awk .

cat > file1
suicidesquad
harley quinn
joker
deadshot

cat > file2
avengers
ironman
captainamerica
hulk

awk '{print NR}' file1 file2
1
2
3
4
5
6
7
8

Un total de 8 registros fueron procesados ​​en la instancia.

FNR - Número de registros en el archivo

Proporciona el número total de registros procesados ​​por la instancia de awk relación con los archivos que awk está procesando

cat > file1
suicidesquad
harley quinn
joker
deadshot

cat > file2
avengers
ironman
captainamerica
hulk

awk '{print FNR}' file1 file2
1
2
3
4
1
2
3
4

Cada archivo tenía 4 líneas cada uno, por lo que cada vez que awk encontró un EOF FNR se restableció a 0.

NF - Número de campos

Proporciona el número de columnas o campos en cada registro (el registro corresponde a cada línea). Cada línea está demarcada por RS que por defecto es nueva línea.

cat > file1
Harley Quinn Loves Joker
Batman Loves Wonder Woman
Superman is not dead
Why is everything I type four fielded!?

awk '{print NF}' file1
4
4
4
7

FS (en algún lugar allá arriba) por defecto es tab o espacio. Así que Harley, Quinn, Loves, Joker son consideradas columnas. El caso se mantiene para las siguientes dos líneas, pero la última línea tiene 7 palabras separadas por espacios, lo que significa 7 columnas.

FNR - El número de registro actual en proceso

FNR contiene el número de la fila del archivo de entrada que se está procesando. En este ejemplo, verá awk comenzando en 1 nuevamente cuando comience a procesar el segundo archivo.

Ejemplo con un archivo

$ cat file1
AAAA
BBBB
CCCC
$ awk '{ print FNR }' file1
1
2
3

Ejemplo con dos archivos

$ cat file1
AAAA
BBBB
CCCC
$ cat file2
WWWW
XXXX
YYYY
ZZZZ
$ awk '{ print FNR, FILENAME, $0 }' file1 file2
1 file1 AAAA
2 file1 BBBB
3 file1 CCCC
1 file2 WWWW
2 file2 XXXX
3 file2 YYYY
4 file2 ZZZZ

Ejemplo extendido con dos archivos.

Se puede usar FNR para detectar si awk está procesando el primer archivo ya que NR==FNR es verdadero solo para el primer archivo. Por ejemplo, si queremos unir los registros de los archivos file1 y file2 en su FNR :

$ awk 'NR==FNR { a[FNR]=$0; next } (FNR in a) { print FNR, a[FNR], $1 }' file1 file2
1 AAAA WWWW
2 BBBB XXXX
3 CCCC YYYY

Falta el registro ZZZZ del file2 ya que FNR tiene un valor máximo diferente para el file1 y el file2 y no existe una unión para los diferentes FNR .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow