Match keys with regex in jq [закрыто]

Возможно, это должен быть комментарий - но у меня недостаточно «статуса», чтобы сделать это, вздох ... - поэтому я пытаюсь дать отправную точку для ответа!

«как мы попали в linux ...» мало что говорит человеку, работающему с AIX. Я попробовал кое-что простое: можно ли принять статус «ДРУГОЕ» в качестве ответа.

С сервера Linux, который я пробовал:

root@x064:[/data]cat /proc/1/status

  ▒▒/▒0▒0▒;▒
            ▒▒▒9▒E▒4▒œOTHER
root@x064:[/data]
root@x064:[/data/prj/gnu/less-481]strings /proc/1/status
OTHER

В AIX это выглядит похоже:

michael@x071:[/home/michael]cat /proc/1/status
  dò0ò0 ~5!(FiË3ã­ú¤ÀOTHER
michael@x071:[/home/michael]strings /proc/1/status
!(Fi
Ë3ã­ú
OTHER

imho - строки! (Fi и Ë3ãú выглядят просто как строки, но это просто «нормальный статус, который отображается как строки»

] Для просмотра / proc вам следует обратить внимание на следующие команды:

michael@x071:[/home/michael]ls -l /usr/bin/proc*
-r-xr-xr-x    1 bin      bin            8462 Jan 12 2015  /usr/bin/proccred
-r-xr-xr-x    1 bin      bin           23820 Jan 12 2015  /usr/bin/procfiles
-r-xr-xr-x    1 bin      bin           14852 Jan 12 2015  /usr/bin/procflags
-r-xr-xr-x    1 bin      bin           11222 Jan 12 2015  /usr/bin/procldd
-r-xr-xr-x    1 bin      bin           20884 Jan 12 2015  /usr/bin/procmap
-r-xr-xr-x    1 bin      bin            8274 Jan 12 2015  /usr/bin/procrun
-r-xr-xr-x    1 bin      bin            8974 Aug 06 2011  /usr/bin/procsig
-r-xr-xr-x    1 bin      bin           24534 Jan 29 2015  /usr/bin/procstack
-r-xr-xr-x    1 bin      bin            8502 Jan 12 2015  /usr/bin/procstop
-r-xr-xr-x    1 bin      bin           34888 Jan 12 2015  /usr/bin/proctree
-r-xr-xr-x    1 bin      bin           13612 Jan 12 2015  /usr/bin/procwait
-r-xr-xr-x    1 bin      bin            9158 Jan 12 2015  /usr/bin/procwdx
8
15.05.2018, 15:27
1 ответ

jq Los filtros de expresiones regulares (test, match,capture)toman texto sin formato como entrada. Para aplicar una expresión regular a nombres clave, primero deberá convertir esos nombres clave en texto.

jqproporciona una funciónto_entriespara eso:

cat jsonfile | jq 'to_entries'

salida:

[
  {
    "key": "key11",
    "value": 1010
  },
  {
    "key": "key11_yes",
    "value": 13
  },
  {
    "key": "key11_no",
    "value": 14
  },
  {
    "key": "key12",
    "value": 12120
  },
...
]

Esto luego puede alimentar un filtro que extrae la clave, la prueba con una expresión regular, luego genera la entrada completa o la omite:

if (.key|test("key[0-9][0-9]$")) then ( {key:.key, value:.value } ) else empty end

La ​​función de coincidencia from_entriespuede convertir las entradas restantes a su forma original, o with_entriespuede hacerlo todo en un solo paso:

cat jsonfile|jq 'with_entries(if (.key|test("key[0-9][0-9]$")) then ( {key:.key, value:.value } ) else empty end )'

El resultado son todos los pares de la entrada cuyas claves coincidieron con el patrón:

{
  "key11": 1010,
  "key12": 12120,
  "key13": 12103
}
17
27.01.2020, 20:11

Теги

Похожие вопросы