sed Pattern matching between two strings only display first match - awk

I am trying to use the sed pattern match between two strings to parse a file and find the first match , using this first match , I am trying to perform some actions in a loop iteratively , the sed pattern match between two strings prints all matches , I am only looking to get the first match :
File :
},{
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
},{
"prefix" : "CS",
"prefix" : "AE",
"last" : 1,
"last" : 0,
"month" : 130,
"month" : 0,
"today": 0,
"today": 20,
"yesterday": 0,
"yesterday": 38,
"agents": 0
},{
"prefix" : "AF",
"prefix" : "CZ",
"last" : 0,
"last" : 0,
"month" : 6,
I am trying to extract between prefix and agents , but only the first match using the below sed command:
sed -n '/prefix/,/agents/p' /var/saas/stats/usage_1499245200.json.2 >> /var/saas/stats/try
Is there a way I can only extract first match from the file during first iteration usage_1499245200.json.2 and execute the loop .
Thanks,
Sriram.V

Using awk :
[akshay#localhost test]$ awk '/prefix/{found=1}found;/agents/{exit}' infile
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
Input
[akshay#localhost test]$ cat infile
},{
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0
},{
"prefix" : "CS",
"prefix" : "AE",
"last" : 1,
"last" : 0,
"month" : 130,
"month" : 0,
"today": 0,
"today": 20,
"yesterday": 0,
"yesterday": 38,
"agents": 0
},{
"prefix" : "AF",
"prefix" : "CZ",
"last" : 0,
"last" : 0,
"month" : 6,

you could add a command to quit when agents is encountered:
sed -n -e '/prefix/,/agents/p' -e '/agents/q'
result:
"prefix" : "AD",
"prefix" : "CQ",
"last" : 0,
"last" : 0,
"month" : 0,
"month" : 5,
"today": 0,
"today": 0,
"yesterday": 2,
"yesterday": 0,
"agents": 0

Related

Postgres how to sum (aggregate) all the values in a key/value json?

My query is here:
select datetime,array_to_json(array_agg(json_build_object('parameter',parameter,'channel_id',channel_id,'value',value,'status',status,'units',units))) as parameters
from dbp_istasyondata
where site_id=10
and channel_id IN (0,1,2,3,4)
and datetime between '2022-12-01T00:00:00' and '2022-12-01T01:30:00'
group by 1
order by 1;
This is how it came out as a response to this query:
"datetime" "parameters"
"2022-12-01 00:00:00" "[{""channel_id"" : 0, ""value"" : 7.72},{""channel_id"" : 1, ""value"" : 1593.87}]"
"2022-12-01 00:01:00" "[{""channel_id"" : 1, ""value"" : 1612.26},{""channel_id"" : 0, ""value"" : 7.72}]"
"2022-12-01 00:02:00" "[{""channel_id"" : 0, ""value"" : 7.72},{""channel_id"" : 1, ""value"" : 1615.36}]"
"2022-12-01 00:03:00" "[{""channel_id"" : 0, ""value"" : 7.72},{""channel_id"" : 1, ""value"" : 1625.99}]"
"2022-12-01 00:04:00" "[{""channel_id"" : 0, ""value"" : 7.71},{""channel_id"" : 1, ""value"" : 1623.12}]"
"2022-12-01 00:05:00" "[{""channel_id"" : 0, ""value"" : 7.72},{""channel_id"" : 1, ""value"" : 1638.58}]"
"2022-12-01 01:00:00" "[{""channel_id"" : 0, ""value"" : 7.74},{""channel_id"" : 1, ""value"" : 1647.09}]"
"2022-12-01 01:01:00" "[{""channel_id"" : 0, ""value"" : 7.74},{""channel_id"" : 1, ""value"" : 1656.71}]"
"2022-12-01 01:02:00" "[{""channel_id"" : 1, ""value"" : 1646.86},{""channel_id"" : 0, ""value"" : 7.74}]"
"2022-12-01 01:03:00" "[{""channel_id"" : 1, ""value"" : 1656.34},{""channel_id"" : 0, ""value"" : 7.74}]"
"2022-12-01 01:04:00" "[{""channel_id"" : 1, ""value"" : 1652.63},{""channel_id"" : 0, ""value"" : 7.74}]"
"2022-12-01 01:05:00" "[{""channel_id"" : 0, ""value"" : 7.74},{""channel_id"" : 1, ""value"" : 1648.01}]"
The result I want:
"datetime" "parameters"
"2022-12-01 00:00:00" "[{""channel_id"" : 0, ""value"" : 50},{""channel_id"" : 1, ""value"" : 1593.87}]"
"2022-12-01 01:00:00" "[{""channel_id"" : 1, ""value"" : 102348},{""channel_id"" : 0, ""value"" : 7.72}]"
The result I want is just an hourly collection of values and display as json. Is there a way to this?
As a result of my research, I found such a sum, but I could not get it to give me the answer I wanted. Can you help me ?
select date_trunc('hour', datetime), SUM (value) as total
from dbp_istasyondata
where channel_id=3
and site_id=16
and datetime between '2022-11-01T00:00:00' and '2022-12-01T04:00:00'
group by 1;
As I understand your question, you want a resultset with one row per hour, and a column holding a JSON array that gives the sum of values of each channel.
You would typically need two levels of aggregation ; one to compute the aggregates per hour and per channel, and then another to aggregate per hour only.
select datehour, jsonb_agg( to_jsonb(t) - 'datehour') res
from (
select date_trunc('hour', datetime) datehour, channel_id, sum(value) value
from bp_istasyondata
where site_id = 10
and channel_id in (0, 1, 2, 3, 4)
and datetime between '2022-12-01T00:00:00' and '2022-12-01T01:30:00'
group by 1, 2
) t
group by 1
Notes:
date_trunc truncates a timestamp or date to a given precision
to_jsonb(t) converts each recordset returned by the subquery to a JSONB object (from which we remove the datehour key using jsonb operator -)
aggregate function json_agg gathers all objects into a JSONB array

Reading JSON data with nested obects within arrays to SQL Server 2016

I'm stuck trying to read the below JSON data into SQL Server 2016. I can't return any values from the Values object onwards.
The select statement shows NULL values for binWidth, minVal, nBins and type.
Also, I'm unsure how to deal with the result array as the values do not have any keys assigned.
Any help much appreciated.
JSON data:
DECLARE #json NVARCHAR(MAX) =
'{
"Histograms": [
{
"Name": "20458-Z01-DWL",
"RegisterId": "0",
"Tags": [],
"UUID": "a4c5fa3f-ecb8-4635-8e94-5167e743b518",
"Values": [
{
"config": {
"binWidth": 50,
"minVal": 50,
"nBins": 18,
"type": "total wait"
},
"result": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
},
{
"Name": "20458-Z02-DWL",
"RegisterId": "1",
"Tags": [],
"UUID": "95d57826-30f6-44c9-ad0d-6a24684fcaed",
"Values": [
{
"config": {
"binWidth": 50,
"minVal": 50,
"nBins": 18,
"type": "total wait"
},
"result": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
},
{
"Name": "20458-Z03-DWL",
"RegisterId": "2",
"Tags": [],
"UUID": "90223a0e-3d1a-471f-a871-ee56da4799f5",
"Values": [
{
"config": {
"binWidth": 50,
"minVal": 50,
"nBins": 18,
"type": "total wait"
},
"result": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
},
{
"Name": "20458-Z04-DWL",
"RegisterId": "3",
"Tags": [],
"UUID": "6c837def-feeb-48d5-8dcf-307b56ec44e9",
"Values": [
{
"config": {
"binWidth": 50,
"minVal": 100,
"nBins": 16,
"type": "total wait"
},
"result": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
},
{
"Name": "20458-Z05-DWL",
"RegisterId": "4",
"Tags": [],
"UUID": "76bd5aa2-8860-4a2e-997d-3c83e940790f",
"Values": [
{
"config": {
"binWidth": 50,
"minVal": 100,
"nBins": 16,
"type": "total wait"
},
"result": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
]
}
],
"LogEntryId": 6593,
"StartTimestamp": "2020-07-20T16:05:00Z",
"Timestamp": "2020-07-20T16:06:00Z"
}'
Query to fetch items from data:
SELECT
[Name],
[RegisterId],
UUID,
binWidth
minVal,
nBins,
[type]
FROM
OPENJSON (#json, '$.Histograms')
WITH
([Name] nvarchar(100),
[RegisterId] nvarchar(100),
UUID nvarchar(100),
[Values] nvarchar(max) AS json) AS Histograms
CROSS APPLY
OPENJSON (Histograms.[Values])
WITH
(binWidth int,
minVal int,
nBins int,
[type] nvarchar(100)) AS config
Figured out the last question re. passing result array into one field - edit below. Thanks again for your guidance, have learnt a lot!
select
Histograms.[Name],
Histograms.[RegisterId],
Histograms.UUID,
config.binWidth,
config.minVal,
config.nBins,
config.[type],
r.[key] as 'result position',
r.[value] as 'result value'
from
openjson(#json, '$.Histograms')
with (
[Name] nvarchar(100),
LogEntryId int,
[RegisterId] nvarchar(100),
UUID nvarchar(100),
[Values] nvarchar(max) as json
) as Histograms
cross apply openjson (Histograms.[Values]) h
cross apply openjson (h.value)
with
(
binWidth int N'$.config.binWidth',
minVal int N'$.config.minVal',
nBins int N'$.config.nBins',
[type] nvarchar(100) N'$.config.type',
result nvarchar(max) as json
) as config
CROSS APPLY OPENJSON(config.result) r

Alternative to Expect.all using elm-test?

I'm new to Elm and I have some question about elm-test. I try to have multiple expect in the same test, but didn't find how. so here is what I've done for now but it's not really expressive
suite : Test
suite =
describe "2048-elm"
[ test "moveLeftWithZero" <|
\_ ->
let
expectedCases =
[ ( [ 2, 0, 0, 2 ], [ 4, 0, 0, 0 ] )
, ( [ 2, 2, 0, 4 ], [ 4, 4, 0, 0 ] )
, ( [ 0, 0, 0, 4 ], [ 4, 0, 0, 0 ] )
, ( [ 0, 0, 2, 4 ], [ 2, 4, 0, 0 ] )
, ( [ 2, 4, 2, 4 ], [ 2, 4, 2, 4 ] )
, ( [ 2, 2, 2, 2 ], [ 4, 4, 0, 0 ] )
]
toTest =
List.map (\expected -> ( Tuple.first expected, Main.moveLeftWithZero (Tuple.first expected) )) expectedCases
in
Expect.equal expectedCases toTest
]
I tried with Expect.all but it does not seems to do what I want

How to write a SQL query to pull a value from a nested json object identified by a variable field name

Problem: how to write a sqlite statement to select a value from a nested json object when the needed name is dynamic / variable. It is also important that this can be done from a single sql statement. Eventually, this will be executed from within a bash script.
In the object sample below, I need to list all the dot11.advertisedssid.ssid in the sql database. An acceptable solution is to list all values of dot11.advertisedssid.ssid that exist in the json object, but I would like to understand how to query a dynamic json name (so I can get the other nested values).
In general I am using json_extract in my sql statement I just can’t figure out how to get to the ssid value (in this example)!
How do I know 733545801 is the field name and how can I then use it in the json_extract statement? And do that for all such nested objects.
Examples:
In general this is how I am querying other json values.
select json_extract(devices.device,'$."dot11.device"."dot11.device.typeset"') from devices;
An object sample from the database:
"dot11.device": {
"dot11.device.typeset": 257,
"dot11.device.client_map": {
},
"dot11.device.num_client_aps": 0,
"dot11.device.advertised_ssid_map": {
"733545801": {
"dot11.advertisedssid.ssid": "SampleFES-WiFi",
"dot11.advertisedssid.ssidlen": 15,
"dot11.advertisedssid.beacon": 1,
"dot11.advertisedssid.probe_response": 1,
"dot11.advertisedssid.channel": "6",
"dot11.advertisedssid.ht_mode": "HT20",
"dot11.advertisedssid.ht_center_1": 0,
"dot11.advertisedssid.ht_center_2": 0,
"dot11.advertisedssid.first_time": 1559567379,
"dot11.advertisedssid.last_time": 1559567379,
"dot11.advertisedssid.beacon_info": "",
"dot11.advertisedssid.cloaked": 0,
"dot11.advertisedssid.crypt_set": 268436162,
"dot11.advertisedssid.maxrate": 65.000000,
"dot11.advertisedssid.beaconrate": 10,
"dot11.advertisedssid.beacons_sec": 2,
"dot11.advertisedssid.ietag_checksum": 1220416683,
"dot11.advertisedssid.wpa_mfp_required": 0,
"dot11.advertisedssid.wpa_mfp_supported": 0,
"dot11.advertisedssid.dot11d_country": "",
"dot11.advertisedssid.dot11d_list": [
],
"dot11.advertisedssid.wps_state": 0,
"dot11.advertisedssid.dot11r_mobility": 0,
"dot11.advertisedssid.dot11r_mobility_domain_id": 0,
"dot11.advertisedssid.dot11e_qbss": 0,
"dot11.advertisedssid.dot11e_qbss_stations": 0,
"dot11.advertisedssid.dot11e_channel_utilization_perc": 0.000000,
"dot11.advertisedssid.ccx_txpower": 0,
"dot11.advertisedssid.cisco_client_mfp": 0,
"dot11.advertisedssid.ie_tag_list": [
0.000000,
1.000000,
3.000000,
5.000000,
42.000000,
50.000000,
48.000000,
45.000000,
61.000000,
127.000000,
221.000000
]
}
}
Thanks for the help!
PS. This is from the new kismet database and the redesigned schema.
Here is the whole object:
{
"kismet.device.base.manuf": "Texas Instruments",
"kismet.device.base.key": "4202770D00000000_AFB4F569D2380000",
"kismet.device.base.macaddr": "38:D2:69:F5:B4:AF",
"kismet.device.base.phyname": "IEEE802.11",
"kismet.device.base.phyid": 0,
"kismet.device.base.name": "LincolnFES-WiFi",
"kismet.device.base.commonname": "LincolnFES-WiFi",
"kismet.device.base.type": "Wi-Fi AP",
"kismet.device.base.basic_type_set": 1,
"kismet.device.base.crypt": "WPA2-PSK",
"kismet.device.base.basic_crypt_set": 2,
"kismet.device.base.first_time": 1559567379,
"kismet.device.base.last_time": 1559567379,
"kismet.device.base.mod_time": 1559567380,
"kismet.device.base.packets.total": 3,
"kismet.device.base.packets.rx": 0,
"kismet.device.base.packets.tx": 0,
"kismet.device.base.packets.llc": 3,
"kismet.device.base.packets.error": 0,
"kismet.device.base.packets.data": 0,
"kismet.device.base.packets.crypt": 0,
"kismet.device.base.packets.filtered": 0,
"kismet.device.base.datasize": 0,
"kismet.device.base.packets.rrd": {
"kismet.common.rrd.last_time": 1559567383,
"kismet.common.rrd.minute_vec": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"kismet.common.rrd.blank_val": 0,
"kismet.common.rrd.aggregator": "default",
"kismet.common.rrd.hour_vec": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"kismet.common.rrd.day_vec": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
"kismet.device.base.signal": {
"kismet.common.signal.type": "dbm",
"kismet.common.signal.last_signal": -56,
"kismet.common.signal.last_noise": 0,
"kismet.common.signal.min_signal": -74,
"kismet.common.signal.min_noise": 0,
"kismet.common.signal.max_signal": -56,
"kismet.common.signal.max_noise": 0,
"kismet.common.signal.maxseenrate": 10,
"kismet.common.signal.encodingset": 1,
"kismet.common.signal.carrierset": 1,
"kismet.common.signal.signal_rrd": {
"kismet.common.rrd.last_time": 1559567383,
"kismet.common.rrd.minute_vec": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"kismet.common.rrd.blank_val": 0,
"kismet.common.rrd.aggregator": "peak_signal"
}
},
"kismet.device.base.freq_khz_map": {
"2437000.000000": 1,
"2442000.000000": 1,
"5500000.000000": 1
},
"kismet.device.base.channel": "6",
"kismet.device.base.frequency": 2442000,
"kismet.device.base.num_alerts": 0,
"kismet.device.base.tags": {
},
"kismet.device.base.seenby": {
"-1970862229": {
"kismet.common.seenby.uuid": "5FE308BD-0000-0000-0000-00C0CAA60413",
"kismet.common.seenby.first_time": 1559567379,
"kismet.common.seenby.last_time": 1559567379,
"kismet.common.seenby.num_packets": 3,
"kismet.common.seenby.freq_khz_map": {
"2437000.000000": 1,
"2442000.000000": 1,
"5500000.000000": 1
},
"kismet.common.seenby.signal": {
"kismet.common.signal.type": "dbm",
"kismet.common.signal.last_signal": -56,
"kismet.common.signal.last_noise": 0,
"kismet.common.signal.min_signal": -74,
"kismet.common.signal.min_noise": 0,
"kismet.common.signal.max_signal": -56,
"kismet.common.signal.max_noise": 0,
"kismet.common.signal.maxseenrate": 10,
"kismet.common.signal.encodingset": 1,
"kismet.common.signal.carrierset": 1,
"kismet.common.signal.signal_rrd": {
"kismet.common.rrd.last_time": 1559567383,
"kismet.common.rrd.minute_vec": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"kismet.common.rrd.blank_val": 0,
"kismet.common.rrd.aggregator": "peak_signal"
}
}
}
},
"kismet.device.base.server_uuid": "A8F71A2C-85F8-11E9-BA41-4B49534D4554",
"dot11.device": {
"dot11.device.typeset": 257,
"dot11.device.client_map": {
},
"dot11.device.num_client_aps": 0,
"dot11.device.advertised_ssid_map": {
"733545801": {
"dot11.advertisedssid.ssid": "LincolnFES-WiFi",
"dot11.advertisedssid.ssidlen": 15,
"dot11.advertisedssid.beacon": 1,
"dot11.advertisedssid.probe_response": 1,
"dot11.advertisedssid.channel": "6",
"dot11.advertisedssid.ht_mode": "HT20",
"dot11.advertisedssid.ht_center_1": 0,
"dot11.advertisedssid.ht_center_2": 0,
"dot11.advertisedssid.first_time": 1559567379,
"dot11.advertisedssid.last_time": 1559567379,
"dot11.advertisedssid.beacon_info": "",
"dot11.advertisedssid.cloaked": 0,
"dot11.advertisedssid.crypt_set": 268436162,
"dot11.advertisedssid.maxrate": 65,
"dot11.advertisedssid.beaconrate": 10,
"dot11.advertisedssid.beacons_sec": 2,
"dot11.advertisedssid.ietag_checksum": 1220416683,
"dot11.advertisedssid.wpa_mfp_required": 0,
"dot11.advertisedssid.wpa_mfp_supported": 0,
"dot11.advertisedssid.dot11d_country": "",
"dot11.advertisedssid.dot11d_list": [
],
"dot11.advertisedssid.wps_state": 0,
"dot11.advertisedssid.dot11r_mobility": 0,
"dot11.advertisedssid.dot11r_mobility_domain_id": 0,
"dot11.advertisedssid.dot11e_qbss": 0,
"dot11.advertisedssid.dot11e_qbss_stations": 0,
"dot11.advertisedssid.dot11e_channel_utilization_perc": 0,
"dot11.advertisedssid.ccx_txpower": 0,
"dot11.advertisedssid.cisco_client_mfp": 0,
"dot11.advertisedssid.ie_tag_list": [
0,
1,
3,
5,
42,
50,
48,
45,
61,
127,
221
]
}
},
"dot11.device.num_advertised_ssids": 1,
"dot11.device.probed_ssid_map": {
},
"dot11.device.num_probed_ssids": 0,
"dot11.device.associated_client_map": {
},
"dot11.device.num_associated_clients": 0,
"dot11.device.client_disconnects": 0,
"dot11.device.last_sequence": 0,
"dot11.device.bss_timestamp": 0,
"dot11.device.num_fragments": 0,
"dot11.device.num_retries": 0,
"dot11.device.datasize": 0,
"dot11.device.datasize_retry": 0,
"dot11.device.last_probed_ssid_csum": 0,
"dot11.device.last_beaconed_ssid": "LincolnFES-WiFi",
"dot11.device.last_beaconed_ssid_checksum": 733545801,
"dot11.device.last_bssid": "38:D2:69:F5:B4:AF",
"dot11.device.last_beacon_timestamp": 1559567379,
"dot11.device.wps_m3_count": 0,
"dot11.device.wps_m3_last": 0,
"dot11.device.wpa_handshake_list": [
],
"dot11.device.wpa_nonce_list": [
],
"dot11.device.wpa_anonce_list": [
],
"dot11.device.wpa_present_handshake": 0,
"dot11.device.min_tx_power": 0,
"dot11.device.max_tx_power": 0,
"dot11.device.supported_channels": [
],
"dot11.device.link_measurement_capable": 0,
"dot11.device.neighbor_report_capable": 0,
"dot11.device.extended_capabilities": [
],
"dot11.device.beacon_fingerprint": 4212996422,
"dot11.device.probe_fingerprint": 0,
"dot11.device.response_fingerprint": 0
}
}
When you want to recursively walk through the fields of an entire object and its contents, you need json_tree():
SELECT j.value
FROM devices AS d
JOIN json_tree(d.device) AS j
WHERE j.key = 'dot11.advertisedssid.ssid';
gives
value
--------------
SampleFES-WiFi
when run on a table holding a fixed version of that sample object.
I know this is a bit old, but OP seemed (in comments) to want a more complete solution. I know I did when I first came across this answer. The accepted solution allows you to pull in one field from the JSON blob, but the common use case in OP's example is to pull multiple fields from that blob. After some searching I found that the json_extract() function works very well for this once you realize that the "dot11.device.advertised_ssid_map" object is an array. Once you provide it with an index his normal query method works.
Considerations:
OP's example is relating to the Kismet device field in the devices table, so my example will use a common query that I often need in the context of that table
With Kismet the keys used in these JSON blobs are long and contain dots, so the syntax for specifying them in SQLite3 is a bit cumbersome for some nested values
SQLite3's JSON1 extension does not seem to like some of the wildcarding syntax normally allowed in JSONPath specifications, so long explicit paths are required
So here is my solution:
SELECT devmac, strongest_signal,
json_extract(d.device, '$."dot11.device"."dot11.device.advertised_ssid_map"[0]."dot11.advertisedssid.ssid"') AS ssid,
json_extract(d.device, '$."dot11.device"."dot11.device.advertised_ssid_map"[0]."dot11.advertisedssid.cloaked"') AS cloaked,
json_extract(d.device, '$."kismet.device.base.signal"."kismet.common.signal.min_signal"') AS weakest_signal,
json_extract(d.device, '$."kismet.device.base.channel"') AS channel,
json_extract(d.device, '$."dot11.device"."dot11.device.num_associated_clients"') AS clientCnt,
json_extract(d.device, '$."kismet.device.base.crypt"') AS crypt,
json_extract(d.device, '$."kismet.device.base.manuf"') AS manuf
FROM devices AS d
WHERE type = 'Wi-Fi AP'
;

how to redirect GAP output to a text file on a local drive?

Example
m1;
[ [ -1, 0, 0, 0, 0, 0 ], [ 1, 1, -1, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 0, 0, 0, -1, 0, 0 ], [ 0, 0, 0, 1, 1, 0 ],
[ 0, 0, 0, 0, 0, -1 ] ]
in the Windows version of the GAP system, how do it redirect any output to a text file on a local drive?
You may use LogTo command to save inputs and outputs of the whole GAP session, or you may use PrintTo to print the object to the text file.
Enter ?LogTo and `?PrintTo' in GAP to see the documentation.
P.S. If you prefer to ask questions about GAP in StackExchange framework, I'd recommend to try to ask them at Mathematics Q&A site here.