Releases: flwyd/adif-multitool
v0.1.20
Download instructions
Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt
or adifmt.exe
, make it executable
with chmod a+x adifmt
, and put it somewhere in your PATH
environment like
~/bin/
. Verify it was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1 chips or newer.
Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern PCs,
adifmt-windows-arm64
for tablets and other ARM devices, and
adifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for
Raspberry Pi or other embedded/mobile devices. Otherwise, download
adifmt-linux-amd64
(64-bit) oradifmt-linux-386
(32-bit).
Alternatively, you can get the latest changes by installing from source:
go install github.com/flwyd/adif-multitool/adifmt@latest
Changes in this release
0.1.20 - 2025-02-15
Added
count
command prints the number of records of each combination of a set of
fields. For example,adifmt count --fields BAND,MODE
prints the number of
contacts made for each band plus mode combination. If a field is blank or not
set on a particular record it contributes an empty string to the combination.
adifmt count
without the--fields
option prints the total number of
records in the file. CSV or TSV output makescount
output easy to pass to
another program like a spreadsheet for further analysis.CONT
(continent) works withadifmt infer
andadifmt validate
based on
theDXCC
orCOUNTRY
field.validate --required-fields
supports conditionals (--if
,--if-not
,
--or-if
,--or-if-not
) to determine which records must have certain fields
set. All records are checked for data type validity, e.g. number formatting.validate
will produce an error if latitude is given as east/west or if
longitude is given as north/south. It is also an error for latitude to be
greater than 90°, not just greater than 180°.validate
will warn ifLAT
orLON
is set but the other one isn’t;
likewise forMY_LAT
/MY_LON
. It’s possible to know latitude without also
knowing longitude, but modern technology usually gives both together, so you
probably had a copy-paste error.validate
handles theCNTY_ALT
/MY_CNTY_ALT
field, currently only used for
New Zealand regions. Currently doesn’t require that each enumeration name
only appears once.--adi-allow-unknown-tags
allows angle brackets in comments<Like-This>
if they don’t look like valid ADI tags or QSO data specifiers like<EOR>
or
<NAME:42>
. This is not intended to be valid in the ADIF specification but
Logbook of The World includes a<APP_LoTW_EOF>
field
which this option will turn into a file comment like[APP_LoTW_EOF]
.
infer
will set the relevant zone field if theDXCC
orCOUNTRY
field is
set and the entity is in a single zone. It will also infer the zone if the
STATE
field is set and the state is only in one zone and the ADIF primary
administrative division enumeration indicates the zone of the subdivision.
For example,COUNTRY=India
will setCQZ=22 ITUZ=41
because India does not
overlap CQ or ITU zone boundaries.COUNTRY=Kazakhstan
will setCQZ=17
but
not setITUZ
at all, since Kazakhstan straddles the ITU Zone 29/30 boundary
and ADIF does not define any subdivisions for the country.DXCC=291
(USA)
would infer nothing because it’s in both multiple CQ Zones and multiple ITU
Zones.DXCC=291 STATE=CA
would inferCQZ=3 ITUZ=6
since California is in
just one zone of each type, butDXCC=291 STATE=MT
would just inferCQZ=4
since Montana is in two ITU Zones.validate
will consider a record valid if the CQ and ITU Zones (if present)
are consistent with the DXCC and primary subdivision. No additional location
checks, e.g. comparing gridsquare to zone boundaries, is done.MY_CQ_ZONE
andMY_ITU_ZONE
work as well.- CQ and ITU Zones also work for DXCC entities which have been removed from the
active list, e.g. Zanzibar. - Some multi-zone countries are missing zone data in the primary administrative
subdivision enumeration.
An ADIF proposal
to expand and correct this data has been proposed, but it may be some time
before the next ADIF version. ADIF Multitool may add its own subdivision
associations before then. - There is some variance between amateur radio organizations on exactly where
ITU boundaries lie. This program uses the
CQWW WAZ list for CQ-zone-to-entity
associations, the
AARL DXCC list
for ITU-to-entity associations, and zone-check.eu to
determine which ITU Zones a subdivision crosses. See also the mapability
links above for some explanation of data challenges. Maritime boundaries
between zones are not well defined and this program does not attempt to
map geographic points to zones (or to geopolitical entities).
Changed
fix
now trims leading and trailing spaces (and other whitespace) from
fields.- Started a changelog file so it’s easier to learn what’s new in
a release. help
documentation tweaks for clarity and consistency.
Fixed
- Consistently trim leading and trailing space from ADI and ADX comments. If a
comment is nothing but space, don’t preserve it in the output.
Note: record comments and file comments are preserved from input through
output, but header comments, such as the text at the top of an ADI file, are
ignored. This could change in the future, but I don’t want to preserve all
the “Generated” lines created as part of a pipeline.
See discussion. - Franz Josef Land DXCC entity is part of Russia, Arkhangelsk Oblast.
Removed
Deprecated flags have been removed and will now show a generic option parsing
error rather than a specific error: --cabrillo-my-exchange-field
,
--cabrillo-their-exchange-field
, and --cabrillo-their-exchange-field-alt
.
v0.1.19-rc4
Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt
or adifmt.exe
, make it executable
with chmod a+x adifmt
, and put it somewhere in your PATH
environment like
~/bin/
. Verify it was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1 chips or newer.
Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern PCs,
adifmt-windows-arm64
for tablets and other ARM devices, and
adifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for
Raspberry Pi or other embedded/mobile devices. Otherwise, download
adifmt-linux-amd64
(64-bit) oradifmt-linux-386
(32-bit).
0.1.19-rc4 - 2025-02-15
Added
count
command prints the number of records of each combination of a set of
fields. For example,adifmt count --fields BAND,MODE
prints the number of
contacts made for each band plus mode combination. If a field is blank or not
set on a particular record it contributes an empty string to the combination.
adifmt count
without the--fields
option prints the total number of
records in the file. CSV or TSV output makescount
output easy to pass to
another program like a spreadsheet for further analysis.CONT
(continent) works withadifmt infer
andadifmt validate
based on
theDXCC
orCOUNTRY
field.validate --required-fields
supports conditionals (--if
,--if-not
,
--or-if
,--or-if-not
) to determine which records must have certain fields
set. All records are checked for data type validity, e.g. number formatting.validate
will produce an error if latitude is given as east/west or if
longitude is given as north/south. It is also an error for latitude to be
greater than 90°, not just greater than 180°.validate
will warn ifLAT
orLON
is set but the other one isn’t;
likewise forMY_LAT
/MY_LON
. It’s possible to know latitude without also
knowing longitude, but modern technology usually gives both together, so you
probably had a copy-paste error.validate
handles theCNTY_ALT
/MY_CNTY_ALT
field, currently only used for
New Zealand regions. Currently doesn’t require that each enumeration name
only appears once.--adi-allow-unknown-tags
allows angle brackets in comments<Like-This>
if they don’t look like valid ADI tags or QSO data specifiers like<EOR>
or
<NAME:42>
. This is not intended to be valid in the ADIF specification but
Logbook of The World includes a<APP_LoTW_EOF>
field
which this option will turn into a file comment like[APP_LoTW_EOF]
.
infer
will set the relevant zone field if theDXCC
orCOUNTRY
field is
set and the entity is in a single zone. It will also infer the zone if the
STATE
field is set and the state is only in one zone and the ADIF primary
administrative division enumeration indicates the zone of the subdivision.
For example,COUNTRY=India
will setCQZ=22 ITUZ=41
because India does not
overlap CQ or ITU zone boundaries.COUNTRY=Kazakhstan
will setCQZ=17
but
not setITUZ
at all, since Kazakhstan straddles the ITU Zone 29/30 boundary
and ADIF does not define any subdivisions for the country.DXCC=291
(USA)
would infer nothing because it’s in both multiple CQ Zones and multiple ITU
Zones.DXCC=291 STATE=CA
would inferCQZ=3 ITUZ=6
since California is in
just one zone of each type, butDXCC=291 STATE=MT
would just inferCQZ=4
since Montana is in two ITU Zones.validate
will consider a record valid if the CQ and ITU Zones (if present)
are consistent with the DXCC and primary subdivision. No additional location
checks, e.g. comparing gridsquare to zone boundaries, is done.MY_CQ_ZONE
andMY_ITU_ZONE
work as well.- CQ and ITU Zones also work for DXCC entities which have been removed from the
active list, e.g. Zanzibar. - Some multi-zone countries are missing zone data in the primary administrative
subdivision enumeration.
An ADIF proposal
to expand and correct this data has been proposed, but it may be some time
before the next ADIF version. ADIF Multitool may add its own subdivision
associations before then. - There is some variance between amateur radio organizations on exactly where
ITU boundaries lie. This program uses the
CQWW WAZ list for CQ-zone-to-entity
associations, the
AARL DXCC list
for ITU-to-entity associations, and zone-check.eu to
determine which ITU Zones a subdivision crosses. See also the mapability
links above for some explanation of data challenges. Maritime boundaries
between zones are not well defined and this program does not attempt to
map geographic points to zones (or to geopolitical entities).
Changed
fix
now trims leading and trailing spaces (and other whitespace) from
fields.- Started a changelog file so it’s easier to learn what’s new in
a release. help
documentation tweaks for clarity and consistency.
Fixed
- Consistently trim leading and trailing space from ADI and ADX comments. If a
comment is nothing but space, don’t preserve it in the output.
Note: record comments and file comments are preserved from input through
output, but header comments, such as the text at the top of an ADI file, are
ignored. This could change in the future, but I don’t want to preserve all
the “Generated” lines created as part of a pipeline.
See discussion. - Franz Josef Land DXCC entity is part of Russia, Arkhangelsk Oblast.
Removed
Deprecated flags have been removed and will now show a generic option parsing
error rather than a specific error: --cabrillo-my-exchange-field
,
--cabrillo-their-exchange-field
, and --cabrillo-their-exchange-field-alt
.
v0.1.19-rc3
Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt
or adifmt.exe
, make it executable
with chmod a+x adifmt
, and put it somewhere in your PATH
environment like
~/bin/
. Verify it was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1 chips or newer.
Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern PCs,
adifmt-windows-arm64
for tablets and other ARM devices, and
adifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for
Raspberry Pi or other embedded/mobile devices. Otherwise, download
adifmt-linux-amd64
(64-bit) oradifmt-linux-386
(32-bit).
v0.1.19-rc2
Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt
or adifmt.exe
, make it executable
with chmod a+x adifmt
, and put it somewhere in your PATH
environment like
~/bin/
. Verify it was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1 chips or newer.
Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern PCs,
adifmt-windows-arm64
for tablets and other ARM devices, and
adifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for
Raspberry Pi or other embedded/mobile devices. Otherwise, download
adifmt-linux-amd64
(64-bit) oradifmt-linux-386
(32-bit).
v0.1.19-rc1
Download the version below matching your computer's OS and processor
architecture. Rename the file to adifmt
or adifmt.exe
, make it executable
with chmod a+x adifmt
, and put it somewhere in your PATH
environment like
~/bin/
. Verify it was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1 chips or newer.
Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern PCs,
adifmt-windows-arm64
for tablets and other ARM devices, and
adifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for
Raspberry Pi or other embedded/mobile devices. Otherwise, download
adifmt-linux-amd64
(64-bit) oradifmt-linux-386
(32-bit).
v0.1.18
Upgrade specification to ADIF 3.1.5. See the annotated spec for differences since 3.1.4.
This release contains no other changes to functionality.
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt
or
adifmt.exe
, make it executable with chmod a+x adifmt
, and put
it somewhere in your PATH
environment like ~/bin/
. Verify it
was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1
chips or newer. Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern
PCs,adifmt-windows-arm64
for tablets and other ARM devices,
andadifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for Raspberry Pi or other embedded/mobile devices. Otherwise,
downloadadifmt-linux-amd64
(64-bit) or `adifmt-linux-386) (32).
v0.1.18-rc0
Upgrade specification to ADIF 3.1.5. See the annotated spec for differences since 3.1.4.
This release contains no other changes to functionality.
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt
or
adifmt.exe
, make it executable with chmod a+x adifmt
, and put
it somewhere in your PATH
environment like ~/bin/
. Verify it
was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1
chips or newer. Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern
PCs,adifmt-windows-arm64
for tablets and other ARM devices,
andadifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for Raspberry Pi or other embedded/mobile devices. Otherwise,
downloadadifmt-linux-amd64
(64-bit) or `adifmt-linux-386) (32).
v0.1.17
Add --field-order
option to control the order of fields in the output,
this is particularly useful when a TSV or CSV will be passed to another tool.
Also fixes a program crash in v0.1.16 when no command line options are set.
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt
or
adifmt.exe
, make it executable with chmod a+x adifmt
, and put
it somewhere in your PATH
environment like ~/bin/
. Verify it
was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1
chips or newer. Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern
PCs,adifmt-windows-arm64
for tablets and other ARM devices,
andadifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for Raspberry Pi or other embedded/mobile devices. Otherwise,
downloadadifmt-linux-amd64
(64-bit) or `adifmt-linux-386) (32).
Full Changelog: v0.1.16...v0.1.17
v0.1.17-rc0
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt
or
adifmt.exe
, make it executable with chmod a+x adifmt
, and put
it somewhere in your PATH
environment like ~/bin/
. Verify it
was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1
chips or newer. Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern
PCs,adifmt-windows-arm64
for tablets and other ARM devices,
andadifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for Raspberry Pi or other embedded/mobile devices. Otherwise,
downloadadifmt-linux-amd64
(64-bit) or `adifmt-linux-386) (32).
Full Changelog: v0.1.16...v0.1.17-rc0
v0.1.16
Expand Cabrillo support to handle almost any contest exchange, except cases where there are two different exchanges at different times, like QTC in DARC WAE contests. Cabrillo import or export must now specify --cabrillo-my-exchange
and --cabrillo-their-exchange
, see README.md for format examples. Also fixed some Cabrillo corner cases like SSB + FM and RTTY + digital being considered MIXED
category rather than PHONE
or DIGI
respectively.
Add --csv-omit-header
and --tsv-omit-header
for cases where field names should not be output in the first row, e.g. if the result will be passed to POSIX sort
or uniq
commands. This is most useful with adifmt select --fields …
so you can ensure the field list and order is only what you expect.
Accept filenames before command line options (i.e. right after the command name) in addition to after, since it can be hard to locate the filename in a long pipeline.
Fixed a crash when sorting fields which are string lists.
Download the version below matching your computer's OS and
processor architecture. Rename the file to adifmt
or
adifmt.exe
, make it executable with chmod a+x adifmt
, and put
it somewhere in your PATH
environment like ~/bin/
. Verify it
was installed by running adifmt version
.
- macOS users: Download
adifmt-darwin-arm64
for Macs with M1
chips or newer. Downloadadifmt-darwin-amd64
for older Macs. - Windows users: Download
adifmt-windows-amd64
for most modern
PCs,adifmt-windows-arm64
for tablets and other ARM devices,
andadifmt-windows-386
for older 32-bit computers. - Linux users: Download
adifmt-linux-arm64
oradifmt-linux-arm
for Raspberry Pi or other embedded/mobile devices. Otherwise,
downloadadifmt-linux-amd64
(64-bit) or `adifmt-linux-386) (32).
Full Changelog: v0.1.15...v0.1.16