La salida de mi comando es algo como:
1540 "A B"
6 "C"
119 "D"
La primera columna siempre es un número, seguido de un espacio, luego una cadena entre comillas dobles.
Mi propósito es obtener solo la segunda columna, como:
"A B"
"C"
"D"
Tenía la intención de utilizar <some_command> | awk '{print $2}'
para lograr esto. Pero la pregunta es, algunos valores en la segunda columna contienen espacio (s), que resulta ser el delimitador predeterminado para awk
separar los campos. Por lo tanto, la salida está en mal estado:
"A
"C"
"D"
¿Cómo obtengo el valor de la segunda columna (con comillas emparejadas) limpiamente?
awk '{$1=""; print $0}'
, pero todavía tiene un carácter de espacio en blanco líder. Podría ser eliminado porsed '/^ //'
. Sin embargo, ¿podría hacerse estoawk
?Respuestas:
O use sed y regex.
fuente
<some_command> | sed 's/.* \(".*"\)/\1/'
Use
-F [field separator]
para dividir las líneas en"
s:o para entrada de tubería
salida:
fuente
'{print "\""$2"\""}'
"\"" + $2 + "\""
. Las comillas circundantes indican algo que debe agregarse a la salida, y\"
se imprimen las comillas escapadas ( ). Para ayudar a visualizar que, esto es lo que se vería como si quisiéramos añadir espacios en blanco alrededor$2
en lugar de las comillas:'{print " "$2" "}'
. También podemos agregar espaciado de formato para que sea un poco más fácil de asimilar:'{print " " $2 " "}'
Si pudieras usar algo diferente a 'awk', entonces prueba esto
-d es un delimitador, -f es el campo para cortar y con -f2- pretendemos cortar el segundo campo hasta el final.
fuente
-d
? Se ve un poco extraño de esa manera.Esto debería funcionar para obtener una columna específica de la salida del comando "docker images":
Esto va a imprimir la tercera columna
fuente
No necesitas awk para eso. Usar
read
en Bash Shell debería ser suficiente, p. Ej.o:
fuente
Si tiene GNU awk, esta es la solución que desea:
fuente
fuente
Luego, supongamos que nombra el script como co, por ejemplo, haga algo como esto para obtener el tamaño de los archivos (el ejemplo supone que está utilizando Linux, pero el script en sí es independiente del sistema operativo):
ls -lh | co 5
fuente