shell - moneda - ¿Cómo obtener la segunda columna desde la salida del comando?
ksh moneda (7)
La salida de mi comando es algo así como:
1540 "A B"
6 "C"
119 "D"
La primera columna es siempre un número, seguido de un espacio, luego una cadena de comillas dobles.
Mi propósito es obtener solo la segunda columna, como:
"A B"
"C"
"D"
Tenía la intención de usar <some_command> | awk ''{print $2}''
<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
para 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 citas emparejadas) limpiamente?
Esto debería funcionar para obtener una columna específica de la salida del comando "imágenes del acoplador":
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 12543ced0f6f 10 months ago 122 MB
ubuntu latest 12543ced0f6f 10 months ago 122 MB
selenium/standalone-firefox-debug 2.53.0 9f3bab6e046f 12 months ago 613 MB
selenium/node-firefox-debug 2.53.0 d82f2ab74db7 12 months ago 613 MB
docker images | awk ''{print $3}''
IMAGE
12543ced0f6f
12543ced0f6f
9f3bab6e046f
d82f2ab74db7
Esto va a imprimir la tercera columna
No necesitas awk por eso. El uso de read
en el shell Bash debería ser suficiente, por ejemplo
some_command | while read c1 c2; do echo $c2; done
o:
while read c1 c2; do echo $c2; done < in.txt
O usa sed y regex.
<some_command> | sed ''s/^.* /(".*"$/)//1/''
Si pudieras usar algo que no sea ''awk'', prueba con esto
echo ''1540 "A B"'' | cut -d'' '' -f2-
-d es un delimitador, -f es el campo para cortar y con -f2- tenemos la intención de cortar el 2do campo hasta el final.
Si tiene GNU awk esta es la solución que desea:
$ awk ''{print $1}'' FPAT=''"[^"]+"'' file
"A B"
"C"
"D"
Use -F [field separator]
para dividir las líneas en "
s:
awk -F ''"'' ''{print $2}'' your_input_file
o para la entrada de la tubería
<some_command> | awk -F ''"'' ''{print $2}''
salida:
A B
C
D
awk -F"|" ''{gsub(//"/,"|");print "/""$2"/""}'' your_file