https://github.com/mrsarm/fq
Command line tool "fq": outputs the frequency table of the input file
https://github.com/mrsarm/fq
c-project cli cmake frequency-table
Last synced: 11 months ago
JSON representation
Command line tool "fq": outputs the frequency table of the input file
- Host: GitHub
- URL: https://github.com/mrsarm/fq
- Owner: mrsarm
- License: lgpl-3.0
- Created: 2018-05-12T22:02:30.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-03-20T03:51:19.000Z (over 2 years ago)
- Last Synced: 2025-03-12T12:16:36.403Z (over 1 year ago)
- Topics: c-project, cli, cmake, frequency-table
- Language: C
- Size: 86.9 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: COPYING
Awesome Lists containing this project
README
"Frequency Counter" project
===========================
Command line tool "fq": outputs the frequency table of the given input.
$ fq README.md # Counted only the first 20 chars as example
> Final frequency table
Symbol Frequency Pos
-------------------------
'e' 65 3 0
' ' 20 2 1
'"' 22 2 2
'n' 6E 2 3
'r' 72 2 4
'u' 75 2 5
'C' 43 1 6
'F' 46 1 7
'c' 63 1 8
'o' 6F 1 9
'q' 71 1 A
't' 74 1 B
'y' 79 1 C
-------------------------
Size: 20 - Number of symbols: 13
$ echo "Hello world" | fq
> Final frequency table
Symbol Frequency Pos
-------------------------
'l' 6C 3 0
'o' 6F 2 1
'.' 0A 1 2
' ' 20 1 3
'H' 48 1 4
'd' 64 1 5
'e' 65 1 6
'r' 72 1 7
'w' 77 1 8
-------------------------
Size: 12 - Number of symbols: 9
The symbols are sorted from the highest to the lowest
frequencies, and in case two bytes have the same
frequency they are sorted "alphabetically".
### Verbose mode
Executing it with the `-v` (verbose) argument,
it iterates the file byte by byte and shows the
frequencies each time:
$ echo 'banana!!' | fq -v
Symbol Frequency Pos
-------------------------
'a' 61 1 0 *
'b' 62 1 1
-------------------------
Size: 2 - Number of symbols: 2
Symbol Frequency Pos
-------------------------
'a' 61 1 0
'b' 62 1 1
'n' 6E 1 2 *
-------------------------
Size: 3 - Number of symbols: 3
Symbol Frequency Pos
-------------------------
'a' 61 2 0 <
'b' 62 1 1
'n' 6E 1 2
-------------------------
Size: 4 - Number of symbols: 3
Symbol Frequency Pos
-------------------------
'a' 61 2 0
'n' 6E 2 1 ^ (+1)
'b' 62 1 2
-------------------------
Size: 5 - Number of symbols: 3
Symbol Frequency Pos
-------------------------
'a' 61 3 0 <
'n' 6E 2 1
'b' 62 1 2
-------------------------
Size: 6 - Number of symbols: 3
Symbol Frequency Pos
-------------------------
'a' 61 3 0
'n' 6E 2 1
'!' 21 1 2 *
'b' 62 1 3
-------------------------
Size: 7 - Number of symbols: 4
Symbol Frequency Pos
-------------------------
'a' 61 3 0
'!' 21 2 1 ^ (+1)
'n' 6E 2 2
'b' 62 1 3
-------------------------
Size: 8 - Number of symbols: 4
Symbol Frequency Pos
-------------------------
'a' 61 3 0
'!' 21 2 1
'n' 6E 2 2
'.' 0A 1 3 *
'b' 62 1 4
-------------------------
Size: 9 - Number of symbols: 5
> Final frequency table
Symbol Frequency Pos
-------------------------
'a' 61 3 0
'!' 21 2 1
'n' 6E 2 2
'.' 0A 1 3
'b' 62 1 4
-------------------------
Size: 9 - Number of symbols: 5
And indicator at the right marks what is the current
symbol found, with `*` when the symbol is found for the first
time, `<` when isn't the first time and the position in the
table didn't change, and `^ (+NUM)` when not the first time
but the position in the table has changed _NUM_ positions.
Build and execute
-----------------
The project uses *CMakes* to build the executable.
1. From the source directory, generate the "Makefile":
$ cmake .
2. *Make* the project and generate the executable "fq".
$ make
3. Then execute with (use with `-h` to see available options):
$ out/fq
4. To install the executable `fq` into `/usr/local/bin`:
$ sudo make install
To install into another folder, when executing the step 1
overwrite the `CMAKE_INSTALL_PREFIX` variable, eg.
to install into the `/usr/bin` folder:
$ cmake -DCMAKE_INSTALL_PREFIX=/usr .
To clean the compiled binaries and compiled modules:
$ make clean
To clean all the compiled binaries and the "Makefiles" files:
$ make clean-all
### Tests
Tests are built with CHEAT ,
a unit testing framework for C/C++, and can be executed
with CMake CTest:
$ make test
To run the tests and see all the output in the console (specially
if the tests fail), first build the project (`make`) and then execute:
$ out/test_fq
About
-----
Source: https://github.com/mrsarm/fq
Authors: (2015-2024) Mariano Ruiz
License: LGPL-3