2009-10-01 21 views

Respuesta

104

Para imprimir la segunda línea:

awk 'FNR == 2 {print}' 

Para imprimir el segundo campo:

awk '{print $2}' 

Para imprimir el tercer campo de la quinta línea:

awk 'FNR == 5 {print $3}' 

Editar : Aquí hay un ejemplo con una línea de encabezado y una descripción de campo (redundante) s:

awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}' 

Hay mejores formas de alinear columnas que "\ t \ t" por cierto.

+0

Gracias! ¿Es posible imprimir las columnas con una cadena específica? – Tim

21

Para ampliar la respuesta de Dennis, utilice awk 's -v opción para pasar los ij y valores:

# print the j'th field of the i'th line 
awk -v i=5 -v j=3 'FNR == i {print $j}' 
+0

¿Podemos tener un ejemplo de cuándo usar la opción -v sería útil? –

+1

Aquí hay uno: http://stackoverflow.com/q/9418617/7552 –

+1

@dessert el 'J' se rellena con el valor' 3', así que cuando lo hace 'print $ J' que está haciendo' imprimir $ 3' cuales está imprimiendo la tercera columna, por lo que es correcta tal como está. –

25

Para imprimir las columnas con una cadena específica, se utiliza el patrón de búsqueda //. Por ejemplo, si usted está buscando para las segundas columnas que contiene abc:

awk '$2 ~ /abc/' 

... y si desea imprimir sólo una columna en particular:

awk '$2 ~ /abc/ { print $3 }' 

... y para una línea particular número:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }' 
+0

Gracias por mostrar el "~" uso –

0

Dado que awk y perl están estrechamente relacionados ...


equivalentes Perl de @ soluciones awk de Dennis:

para imprimir la segunda línea:
perl -ne 'print if $. == 2' file

Para imprimir el segundo campo:
perl -lane 'print $F[1]' file

Para imprimir el tercer campo de la quinta línea:
perl -lane 'print $F[2] if $. == 5' file


equivalente de Perl @ solución de Glenn:

Imprimir el campo j-ésima de la i-ésima línea de

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file


equivalentes de Perl @ soluciones de Hai:

si usted está buscando para las segundas columnas que contienen ABC:

perl -lane 'print if $F[1] =~ /abc/' foo

... y si desea imprimir sólo una columna en particular:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... y por un número de línea en particular:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo


-l elimina los saltos de línea, y los añade de nuevo en al imprimir
-a autosplits la línea de entrada en una matriz @F, utilizando los espacios en blanco como delimitador
-n bucle sobre cada línea del archivo de entrada
-e ejecutar el código entre comillas
$F[1] es el segundo elemento de la matriz, ya que comienza en Perl 0
$. es el número de línea

0

me encontré con este comando trabaja

root @ puerta de enlace:/home/sshuser # AWS EC2 describe-casos --instance-ids i-2db0459d | grep 'ESTADO \ | TAG' | awk 'FNR == 1 {print $ 1}'

ESTADO

Cuestiones relacionadas