Analyzovat více souborů json a výstup na zápas/hitů proti regulární výrazy spojené s názvy souborů

0

Otázka

V současné době, příkaz cat odveden k jq mi pomáhá zpracovat více souborů JSON v mém pracovním adresáři a obrazovky proti regulárnímu výrazu, odpovídající e-mailové id jsou k dispozici v všechny soubory. Nicméně, jsem zájem na určení názvu souboru také v nichž regex vzor je hit/uzavřeno

cat *.json | jq '. as $data | [path(..| select(scalars and (tostring | test("^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$", "ixn")))) ] | map({ (.|join(".")): (. as $path | .=$data | getpath($path)) }) | reduce .[] as $item ({}; . * $item)' 

Žádost vaši laskavou pomoc ladění příkaz print $názvem. díky!!!

filenames jq
2021-11-24 05:10:54
2

Nejlepší odpověď

1

input_filename hodnotí se vstupní soubor název souboru v současné době číst (po otevření). Pro STDIN, hodnotí se "<stdin>":

jq  'input_filename, input_filename' <<< 1
"<stdin>"
"<stdin>"

To funguje s -n možnost příkazového řádku, ale pouze po input nebo inputs funkce se nazývá:

jq -n 'input_filename, (input | input_filename)' <<< 1
null
"<stdin>"
2021-11-24 06:52:07
0

Pro jq-vnitřní roztok používat input_filename jako @vrcholu navrhl. Tady je externí řešení, která iteruje přes vaše vstupní soubory a předá název souboru jako proměnnou do jq. Tento přístup však vyžaduje, jq jednou pro každý vstupní soubor (jak protichůdný k vaší cat *.json | jq ... přístup, který má jen jeden hovor), tak můžete narazit na problémy s výkonem při použití většího počtu vstupních souborů.

for f in *.json
do jq --arg f "$f" '. as $data | ... (use $f here) ...' "$f"
done
2021-11-24 06:25:47

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................