Cómo utilizar grep
cualquier otra herramienta para obtener un valor específico en una salida
En el siguiente resultado necesito obtener el valor 255.00
en la línea conMinimum: 255.00 (1.0000)
Un patrón como:Channel Statistics:\s+Gray:\s+Minimum: +([\d.]+)
Image: test.tif
Format: TIFF (Tagged Image File Format)
Geometry: 2525x1785
Class: DirectClass
Type: bilevel
Depth: 1 bits-per-pixel component
Channel Depths:
Gray: 1 bits
Channel Statistics:
Gray:
Minimum: 255.00 (1.0000)
Maximum: 255.00 (1.0000)
Mean: 255.00 (1.0000)
Standard Deviation: 0.00 (0.0000)
Filesize: 581
Interlace: No
Orientation: Unknown
Background Color: white
Border Color: #DFDFDF
Matte Color: #BDBDBD
Respuesta1
Usando Perl, puedes hacer lo siguiente. Captura el valor numérico después minimum:
del interior del bloque Channel Statistics:
y lo imprime:
perl -0 -ne '/Channel Statistics:\s+Gray:\s+Minimum:\h+([\d.]+)/ && print $1,"\n"' file
Producción:(para el ejemplo dado)
255.00
Explicación:
-0 # specifies the input record separator. If there are no digits, the null character is the separator. The whole file is read in a single string.
-n # Iterate over the file
-e # execute the command line
expresión regular:
/ # regex delimiter
Channel Statistics: # literally
\s+ # 1 or more any kind of spaces
Gray: # literally
\s+ # 1 or more any kind of spaces
Minimum: # literally
\h+ # 1 or more horizontal spaces
( # start group 1
[\d.]+ # 1 or more digit or dot
) # end group
/ # regex delimiter
Respuesta2
Consed
sed -rn 's/^\s+Minimum:\s+([0-9.]+).+$/\1/p' image.data
En cámara lenta:
-r
dicesed
que usemos la "sintaxis" de expresión regular extendida-n
le dicesed
que no imprima líneas que no coincidans/^\s+Minimum:\s+([0-9.]+).+$/\1/
coincide con su línea objetivo y la reemplaza solo con el valor que buscap
le dicesed
que imprima el resultado
Si necesita eliminar la ambigüedad teniendo en cuenta el contenido de las líneas anteriores, es un poco más complicado:
sed -r ':a;N;$!ba; s/^.*Gray:\s*\n\s+Minimum:\s+([0-9.]+).+$/\1/' image.data
dónde:
:a;N;$!ba;
es un bucle en elsed
idioma que carga todo el archivo a la vez-n
Ya no es necesario ya que no hay otras líneas que no queramos imprimir.- el final
p
tampoco es necesario ya que no usamos-n
Respuesta3
Esto es muy simplista, suponiendo que la cadena 'Mínimo:' aparece exactamente una vez en su entrada:
awk '/Minimum:/ {print $2}'