ZSV/lib: a fast CSV parsing library and standalone utility

Related tags

Miscellaneous zsv
Overview

Please note: this code is still alpha / pre-production. Everything here should be considered preliminary.

If you like ZSVlib, please give it a star!

ZSV/lib: a fast CSV library and extensible command-line utility

ZSVlib is a fast CSV parser library. It achieves high performance using SIMD operations, efficient memory use and other optimization techniques.

Preliminary performance results compare favorably vs other fast CSV parsers. The below were results on a pre-M1 OSX MBA; other results were usually similar though on Windows the difference was much smaller (~20%but still the same direction):
count speed select speed

** See 12/19 update re M1 processor at https://github.com/liquidaty/zsv/blob/main/app/benchmark/README.md

ZSV (zsv) is an extensible CSV utility, which uses ZSVlib, for tasks such as slicing and dicing, querying with SQL, combining, converting, serializing, flattening and more.

ZSV is streamlined for easy development of custom dynamic extensions, one of which is available here and offers added features such as statification and validation reporting, automated column mapping and transformation, and github-like capabilities for sharing and collaboration.

ZSVlib and ZSV are written in C, but since ZSVlib is a library, and ZSV extensions are just shared libraries, you can use ZSVlib with your own code in any programming language, so long as it has been compiled into a shared library that implements the expected interface.

https://github.com/liquidaty/zsv/blob/main/include/zsv/ext/implementation_private.h

Key highlights

  • Available as BOTH a library and an application
  • Open-source, permissively licensed
  • Handles real-world CSV the same way that spreadsheet programs do (including edge cases). Gracefully handles (and can "clean") real-world data that may be "dirty"
  • Runs on OSX (tested on clang/gcc), Linux (gcc), Windows (mingw), BSD (gcc-only) and in-browser (emscripten/wasm)
  • Fast (maybe the fastest ever?). See app/benchmark/README.md
  • Low memory usage (regardless of how big your data is)
  • Easy to use as a library in a few lines of code
  • Includes ZSV command-line app with batteries:
    • select, count, sql query, describe, flatten, serialize and more
  • Easy to extend/customize zsv with a few lines of code via modular plug-in framework. Just write a few custom functions and compile into a distributable DLL that any existing zsv installation can use
  • zsvlib and zsv are permissive licensed
  • Coming soon!: free extension with added capabilities:
    • generate multi-tab XLSX validation break-out reports
    • generate multi-table XLSX or CSV stratifications
    • automate column mapping and transformations
    • create, train and share re-usable data domains using github-like features

Binary downloads

Pre-built binaries for OSX, Windows and Linux are available at https://zsvhub.com/download

Demo

zsv runs best-- by far-- as a desktop CLI. But, you can also try out an extended ZSV version in the browser (though it runs much slower), at https://zsvhub.com/playground. A tutorial that demonstrates a small subset of the capabilities of ZSV and the ZSVHub extension is available at https://github.com/liquidaty/zsvhub-cli/blob/main/demos/covid_vaccine/README.md

Why another CSV parser / utility?

Our objectives, which we were unable to find in a pre-existing project, are:

  • Reasonably high performance
  • Available as both a library and a standalone executable / command-line interface utility (CLI)
  • Memory-efficient, configurable resource limits
  • Handles real-world CSV cases the same way that Excel does, including all edge cases (quote handling, newline handling (either \n or \r), embedded newlines, abnormal quoting (e.g. aaa"aaa,bbb...)
  • Handles other "dirty" data issues:
    • Assumes valid UTF8, but does not misbehave if input contains bad UTF8
    • Option to specify multi-row headers
    • Does not assume or stop working in the case of inconsistent numbers of columns
  • Easy to use library or extend/customize CLI

There are several excellent tools that achieve high performance. Among those we considered were xsv and tsv-utils. While they met our performance objective, both were designed primarily as a utility and not a library, and were not easy enough, for our needs, to customize. This was because they were not designed for modular customizations that could be maintained (or licensed) independently of the related project (in addition to the fact that they were written in Rust and D, respectively, which happen to be languages with which we lacked deep experience). Others we considered were Miller (mlr), csvkit and Go (csv module), which did not meet our performance objective. We also considered various libraries using SIMD, but none seemed to (yet) meet the "real-world CSV" objective.

Hence zsv was created as a library and a versatile application, both optimized for speed and ease of development for extending and/or customizing to your needs

Batteries included

ZSV comes with several built-in commands:

  • echo: read CSV from stdin and write it back out to stdout. This is mostly useful for demonstrating how to use the API and also how to create a plug-in, and has some limited utility beyond that e.g. for adding/removing the UTF8 BOM, or cleaning up bad UTF8
  • select: re-shape CSV by skipping leading garbage, combining header rows into a single header, selecting or excluding specified columns, removing duplicate columns, sampling, searching and more
  • sql: run ad-hoc SQL query on a CSV file
  • desc: provide a quick description of your table data
  • pretty: format for console (fixed-width) display, or convert to markdown format
  • 2json, 2tsv: convert CSV to JSON or TSV
  • serialize (inverse of flatten): convert an NxM table to a single 3x (Nx(M-1)) table with columns: Row, Column Name, Column Value
  • flatten (inverse of serialize): flatten a table by combining rows that share a common value in a specified identifier column
  • stack: merge CSV files vertically

Each of these can also be built as an independent executable.

Building and installing the CLI

Basically: ./configure && sudo make install

See INSTALL.md for more details.

Third-party extensions

In addition to the above extensions, at least one third-party extensions will be made available. If you would like to add your extensions to this list, please contact the project maintainers.

Creating your own extension

You can extend ZSV by providing a pre-compiled shared or static library that defines the functions specified in extension_template.h and which ZSV loads in one of three ways:

  • as a static library that is statically linked at compile time
  • as a dynamic library that is linked at compile time and located in any library search path
  • as a dynamic library that is located in the same folder as the ZSV executable and loaded at runtime if/as/when the custom mode is invoked

Example and template

You can build and run a sample extension by running make test from app/ext_example.

The easiest way to implement your own extension is to copy and customize the template files in app/ext_template

Alpha release limitations

This alpha release does not yet implement the full range of core features that are planned for implementation prior to beta release. If you are interested in helping, please post an issue.

Possible next steps:

  • online "playground"
  • optimize search; add search with hyperscan or re2 regex matching, possibly parallelize?
  • auto-generated documentation, and better documentation in general
  • Additional benchmarking. Would be great to use https://bitbucket.org/ewanhiggs/csv-game/src/master/ as a springboard to benchmarking a number of various tasks
Comments
  • "Illegal instruction" when running on Intel Ivy Bridge CPU

    Hello- I wanted to compare the speed benchmark for zsv with csvquote, and ran into this issue where zsv appears to not run on my 2012-era CPU. This is likely because my CPU does not support the AVX2 set of SIMD instructions.

    $ ./confgiure
    $ sudo make install
    $ zsv count testdata.csv
    Illegal instruction
    

    For the zsv benchmark, I think you may want to use a different test data set instead of https://burntsushi.net/stuff/worldcitiespop_mil.csv because that data does exercise any special csv parsing capabilities. With this data set, to perform the benchmark tests to count rows and select columns the standard unix text processing tools wc and cut would suffice (or awk).

    A better test for benchmarking would be a large file (multiple GB) that contains quoted fields with embedded field separators and record separators (commas and newlines). A clever example of a self-generating CSV test file is here which provides an infinite stream of random CSV data that can be adjusted to increase or decrease the portion of quoted fields that contain separator characters that should be treated as data.

    Also the benchmark test should check for correct results as well as measure speed.

    Hope these suggestions are helpful. Dan

    opened by dbro 20
  • make install fails for lib on Windows (MinGW + GitBash)

    make install fails for lib on Windows (MinGW + GitBash)

    Description

    make install fails for lib on Windows (MinGW + GitBash).

    Errors:

    Working directory is 'D:\a\zsv\zsv'
    [command]"C:\Program Files\Git\bin\git.exe" version
    git version 2.35.1.windows.2
    ...
    ./configure --prefix=build
    make install
    ...
    Building with mingw
    mingw32-make[1]: Entering directory 'D:/a/zsv/zsv/src'
    Using config file /d/a/zsv/zsv/config.mk
    No profiling set. To use PGO, compile with PGO=1, then run with data, then compile again with PGO=2
    No VECTOR_SIZE set, using 256
    Makefile:13: /d/a/zsv/zsv/config.mk: No such file or directory
    mingw32-make[1]: Leaving directory 'D:/a/zsv/zsv/src'
    mingw32-make[1]: *** No rule to make target '/d/a/zsv/zsv/config.mk'.  Stop.
    mingw32-make: *** [Makefile:54: install] Error 2
    

    Some digging into it revealed that src/Makefile:147 was unable to create a target for LIBZSV_INSTALL which contains /d/a/zsv/zsv/config.mk.

    Could you please share your Windows + MinGW environment specs with versions?

    Expected

    The build should be successful.

    Actual

    The build is failing.

    bug 
    opened by iamazeem 8
  • Incorrect columns for last row

    Incorrect columns for last row

    A user reported that the last row of some data was showing the incorrect number of columns. I tested the file with both the pull and simple examples, and it shows the same problem in both.

    Here's a version of the data exhibiting the issue. Most text has been converted to underscores. The file is semi-colon (;) delimited, is UTF-8 encoded, and has some non-ascii characters :

    wrong_cols.csv

    The last row reports 46 columns instead of 37.

    Adding a single character to one of the preceding rows (from row 396 onwards) results in a successful parse. Pulling the header and last row into a new file results in a successful parse.

    Tested on Windows (x64) and macOS (arm64).

    bug 
    opened by woollybah 7
  • ARM64 Linux Support

    ARM64 Linux Support

    Any plans to add support for ARM64 Linux?

    I just tried to build it for ARM64 on Linux by aarch64-linux-gnu-gcc cross-compiler.

    PREFIX=zsv-arm64-linux-gcc CC=aarch64-linux-gnu-gcc ./configure
    make install
    

    But it failed with linker errors for termcap library:

    /usr/lib/gcc-cross/aarch64-linux-gnu/10/../../../../aarch64-linux-gnu/bin/ld: cannot find -ltermcap
    collect2: error: ld returned 1 exit status
    

    You might want to explore this further if it's in the roadmap. Thanks!

    question 
    opened by iamazeem 7
  • Lack of documentation and unclear API is a real drawback.

    Lack of documentation and unclear API is a real drawback.

    Hello,

    I'm very interested in using zsvlib into a C project.

    I'm looking for a way to use the library in order to achieve the same result as the command zsv select file.csv -- column_title to convert a column into a char**.

    However, I find the API unclear, and the applications source code seems quite convoluted, to not say obscure. I'm starting to understand that a zsvlib “Hello World” should start with:

    struct zsv_opts* opts = zsv_get_default_opts();
    zsv_parser parser = zsv_new(opts);
    

    But, again, I feel like I'm at the beginning of a long journey before I finally feel comfortable with the API, and start producing the result I want to achieve.

    I'm hoping to use this library in the future, so I wanted to signal this difficulty.

    Best regards.

    opened by malespiaut 6
  • build fails because `zsv_scan_fixed.c` can't be found

    build fails because `zsv_scan_fixed.c` can't be found

    $ git clone https://github.com/liquidaty/zsv
    $ cd zsv
    $ ./configure
    config will be saved to config.mk
    checking for AWK tool... awk
    checking for C compiler... cc
    checking whether C compiler works... yes
    checking for ar... gcc-ar
    checking for ranlib... gcc-ranlib
    checking host system type... x86_64-pc-linux-gnu
    checking whether compiler accepts -Werror=unknown-warning-option... no
    checking whether compiler accepts -Werror=unused-command-line-argument... no
    checking whether compiler accepts -Werror=ignored-optimization-argument... no
    checking whether linker accepts -Werror=unknown-warning-option... no
    checking whether linker accepts -Werror=unused-command-line-argument... no
    checking whether linker accepts -Werror=ignored-optimization-argument... no
    checking whether compiler accepts -fvectorize... no
    checking whether compiler accepts -ftree-vectorize... yes
    checking whether compiler accepts -fopt-info-vec-optimized... yes
    checking whether compiler accepts -fopt-info-vec-missed... yes
    checking whether compiler accepts -fopt-info-vec-all... yes
    checking whether compiler accepts -fpie... yes
    checking whether compiler accepts -fpic... yes
    checking whether linker accepts -pie... yes
    checking whether linker accepts -fpic... yes
    checking whether compiler accepts -pipe... yes
    checking whether compiler accepts -ffunction-sections... yes
    checking whether compiler accepts -fdata-sections... yes
    checking whether compiler accepts -mavx2... yes
    checking whether compiler accepts -mvpclmulqdq... yes
    checking whether compiler accepts -flto... yes
    checking whether compiler accepts -fvisibility=hidden... yes
    checking whether linker accepts -Wl,--gc-sections... yes
    checking whether linker accepts -flto... yes
    checking whether linker accepts -fwhole-program... yes
    checking whether linker accepts -march=native... yes
    checking whether linker accepts -ldl... yes
    checking whether linker accepts -Wl,-z,now... yes
    checking whether linker accepts -Wl,-z,relro... yes
    checking whether linker accepts -Wl,-z,now... yes
    checking whether linker accepts -Wl,-z,relro... yes
    checking whether compiler accepts _mm256_movemask_epi8 from immintrin.h...yes
    checking whether there is a header called immintrin.h... yes
    checking whether compiler accepts memmem from string.h...no
    checking whether compiler accepts tgetent from termcap.h...yes
    checking whether compiler accepts arc4random_uniform from stdlib.h...no
    checking whether compiler accepts rand_s from stdlib.h with #define _CRT_RAND_S... no
    checking whether compiler accepts __builtin_expect(0,0)...yes
    checking whether compiler accepts __builtin_expect_with_probability(0,0,0.5)...yes
    creating config.mk... done
    $ make all
    make[1]: Entering directory '/home/andrew/clones/zsv/src'
    Using config file /home/andrew/clones/zsv/config.mk
    No profiling set. To use PGO, compile with PGO=1, then run with data, then compile again with PGO=2
    No VECTOR_SIZE set, using 256
    cc -pipe -ffunction-sections -fdata-sections  -fvisibility=hidden -DHAVE__MM256_MOVEMASK_EPI8 -DHAVE_IMMINTRIN_H -DHAVE_TGETENT -DHAVE___BUILTIN_EXPECT -DHAVE___BUILTIN_EXPECT_WITH_PROBABILITY -mavx2 -DNDEBUG -O3 -fPIC -std=gnu11 -Wno-gnu-statement-expression -Wshadow -Wall -Wextra -Wno-missing-braces -pedantic -D_GNU_SOURCE  -I/home/andrew/clones/zsv/include -DNO_UTF8_CHECK -DVECTOR_SIZE_256 -o /home/andrew/clones/zsv/build/Linux/rel/cc/objs/zsv.o -c zsv.c
    In file included from zsv.c:20:
    zsv_internal.c:394:10: fatal error: zsv_scan_fixed.c: No such file or directory
      394 | #include "zsv_scan_fixed.c"
          |          ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    make[1]: *** [Makefile:163: /home/andrew/clones/zsv/build/Linux/rel/cc/objs/zsv.o] Error 1
    make[1]: Leaving directory '/home/andrew/clones/zsv/src'
    make: *** [Makefile:49: all] Error 2
    

    There is no zsv_scan_fixed.c file in my checkout, so... yeah. My next step was to try your downloads, but your web site is borked:

    $ curl https://zsvhub.com
    curl: (60) SSL: no alternative certificate subject name matches target host name 'zsvhub.com'
    More details here: https://curl.se/docs/sslcerts.html
    
    curl failed to verify the legitimacy of the server and therefore could not
    establish a secure connection to it. To learn more about this situation and
    how to fix it, please visit the web page mentioned above.
    

    curl -k https://zsvhub.com works. So I try my browser, and it finally lets me through after a bunch of warnings and I was able to get a working binary that way.

    opened by BurntSushi 6
  • configure script is failing

    configure script is failing

    Description

    On Ubuntu 18.04 and 20.04 under bash, the configure script fails with these errors:

    $ ./configure
    ./configure: 214: [: unexpected operator
    ./configure: 225: [: unexpected operator
    ./configure: 227: [[: not found
    ...
    checking whether compiler accepts __builtin_expect(0,0)..../configure: 156: [: 1: unexpected operator
    no
    checking whether compiler accepts __builtin_expect_with_probability(0,0,0.5)..../configure: 156: [: 1: unexpected operator
    no
    creating ... ./configure: 492: cannot create : Directory nonexistent
    

    As the configure script specifies #!/bin/sh, the bash things such as [[ condition ]], and == are not supported. The same behavior has also been observed in the GitHub Actions CI pipeline. However, with #!/bin/bash, it works fine.

    You might want to look into it on your side as well. Maybe, a fix would be required either to use pure sh stuff or using bash

    Expected

    The configure script should work without fail.

    Actual

    The configure script fails with multiple syntax errors.

    bug 
    opened by iamazeem 5
  • [macos/clang] Tests are failing

    [macos/clang] Tests are failing

    On macos/clang, the tests are failing with the following errors:

    test-echo: 
    /bin/sh: line 1:  2584 Illegal instruction: 4  /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/bin/zsv_echo /Users/runner/work/zsv/zsv/data/loans_1.csv > /tmp/test-echo.out
    make[2]: *** [test-echo] Error 132
    make[1]: *** [test-echo] Error 2
    make: *** [test] Error 2
    

    macOS: 10.15 clang: 12.0.0

    Passed LDFLAGS='-mmacosx-version-min=10.5' as env var but looks like it's not included in the final linking command:

    clang -pipe -ffunction-sections -fdata-sections -fpic -O3 -DNDEBUG -std=gnu11 -Wno-gnu-statement-expression -Wshadow -Wall -Wextra -Wno-missing-braces -pedantic -DSTDC_HEADERS -D_GNU_SOURCE -ftree-vectorize -fvisibility=hidden -I/Users/runner/work/zsv/zsv/amd64-macosx-clang/include -mavx2 -DZSV_EXTRAS -DHAVE__MM256_MOVEMASK_EPI8 -DHAVE_IMMINTRIN_H -DHAVE_MEMMEM -DHAVE_TGETENT -DHAVE_ARC4RANDOM_UNIFORM -DHAVE___BUILTIN_EXPECT -DNO___BUILTIN_EXPECT_WITH_PROBABILITY -flto -Iexternal/utf8proc-2.6.1 -DUTF8PROC -DUTF8PROC_STATIC -I/Users/runner/work/zsv/zsv/include -o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/bin/zsv_echo echo.c /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/writer.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/file.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/err.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/signal.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/mem.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/clock.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/arg.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/dl.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/string.o /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/objs/utils/dirs.o   -L/Users/runner/work/zsv/zsv/amd64-macosx-clang/lib -lzsv /Users/runner/work/zsv/zsv/build/Darwin/rel/clang/external/utf8proc-2.6.1/utf8proc.o  -lpthread  -march=native -ldl -ltermcap 
    

    See full logs here: https://github.com/liquidaty/zsv/runs/6664830117?check_suite_focus=true

    bug 
    opened by iamazeem 4
  • more precise description for UTF-8 behavior

    more precise description for UTF-8 behavior

    The README shows "Assumes valid UTF8, but does not misbehave if input contains bad UTF8", but this does not specify 1. for what this assumption is made, 2. what parts of UTF8 are checked (codepoints, grapheme clusters or more stuff).

    Typically, one means codepoints, but this is not explicit in the text.

    opened by matu3ba 4
  • extend benchmarks

    extend benchmarks

    Please be explicit on 1. allocation, 2. constrains, 3. usage of SIMD

    I would be curious, how fast other SIMD-accelerated parsers are in comparison. For example, there is https://github.com/geofflangdale/simdcsv

    opened by matu3ba 4
  • choco.exe install failing

    choco.exe install failing

    Any idea why this might be failing?

    I downloaded the latest zsv-0.3.4-alpha-amd64-windows-mingw.nupkg and am executing:

    choco install zsv -source .\zsv-0.3.4-alpha-amd64-windows-mingw.nupkg

    image

    bug 
    opened by aagha 3
  • [CI] Fix release workflow warnings

    [CI] Fix release workflow warnings

    Release (v0.3.4-alpha) CI run: https://github.com/liquidaty/zsv/actions/runs/3660069700

    Warnings:

    ci (ubuntu-20.04)
    Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: dawidd6/action-get-tag@v1
    
    ci (ubuntu-20.04)
    The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
    
    ci (macos-12)
    Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: dawidd6/action-get-tag@v1
    
    ci (macos-12)
    The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
    

    These warnings are coming from: https://github.com/liquidaty/zsv/blob/3ea675047d4236d32269a9739d147a5ac16e6407/.github/workflows/ci.yml#L37-L41

    The rest of the actions have already been updated earlier for NodeJS updates.

    https://github.com/dawidd6/action-get-tag has been archived by its author.

    As an alternative, the tag can directly be extracted and set like this (lines copied here for quick reference):

        - name: Get tag if tagged/released and set TAG env var
          if: startsWith(github.ref, 'refs/tags/v')
          run: |
            TAG=$(echo $GITHUB_REF | cut -d '/' -f3)
            echo "TAG: $TAG"
            if [[ $TAG == "v"* ]]; then
              TAG="${TAG:1}"
            fi
            echo "TAG: $TAG"
            echo "TAG=$TAG" >> $GITHUB_ENV
    

    I'll submit a PR shortly. Thanks!

    CC: @liquidaty

    enhancement 
    opened by iamazeem 0
  • [Ubuntu 18.04] zsv linked GLIBC version issue

    [Ubuntu 18.04] zsv linked GLIBC version issue

    zsv did not work after installing the .deb packages.

    Environment:

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 18.04.6 LTS
    Release:	18.04
    Codename:	bionic
    

    Downloaded and tested with:

    • https://github.com/liquidaty/zsv/releases/download/v0.3.4-alpha/zsv-0.3.4-alpha-amd64-linux-gcc.deb
    • https://github.com/liquidaty/zsv/releases/download/v0.3.4-alpha/zsv-0.3.4-alpha-amd64-linux-clang.deb

    Error:

    $ zsv version
    zsv: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by zsv)
    zsv: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by zsv)
    

    Linked libraries:

    $ ldd $(which zsv)
    /usr/bin/zsv: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/bin/zsv)
    /usr/bin/zsv: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /usr/bin/zsv)
    	linux-vdso.so.1 (0x00007ffe0ffed000)
    	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd781c9a000)
    	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd781a96000)
    	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd7816f8000)
    	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd781307000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007fd781eb9000)
    

    As these binaries are built on Ubuntu 20.04 so this issue is expected for the versions lower than 20.04 (where GLIBC version is not supported).

    To support Ubuntu 18.04, the runner should be the same. However, the Ubuntu 18.04 runner has been deprecated.

    One solution could be to generate a statically linked binary to resolve this issue. Another could be to build binaries on Docker containers and distribute those.

    In addition, the minimum supported version of the target OS for the prebuilt binaries should properly be documented in the README in case the static linkage is not possible.

    Thanks!

    bug documentation enhancement 
    opened by iamazeem 2
  • Add version.h to store the released version

    Add version.h to store the released version

    Currently, there's no version file in the codebase. The version is extracted using git command and used as a compile time macro VERSION wherever needed. Also, the CI workflow is being updated with the historical released version. See: https://github.com/liquidaty/zsv/blob/dab4873f1731bb3ebbf847e61e5c4b2da365dd85/.github/workflows/ci.yml#L26

    Instead of hardcoding the released version as TAG in the CI, it is suggested to use a version.h header file as the default place to store version information e.g. version, branch, date, etc.

    enhancement 
    opened by iamazeem 1
  • [PKG] Publish to homebrew/homebrew-core

    [PKG] Publish to homebrew/homebrew-core

    Formula added: https://github.com/liquidaty/homebrew-core/blob/master/Formula/zsv.rb

    It failed the audit with these errors:

    $ brew audit --new-formula zsv
    zsv:
      * Stable version URLs should not contain alpha
      * GitHub repository not notable enough (<30 forks, <30 watchers and <75 stars)
    Error: 2 problems in 1 formula detected
    

    Need to update and publish it as soon as the criteria is met.

    documentation enhancement 
    opened by iamazeem 2
Releases(v0.3.4-alpha)
Owner
null
Unix pager (with very rich functionality) designed for work with tables. Designed for PostgreSQL, but MySQL is supported too. Works well with pgcli too. Can be used as CSV or TSV viewer too. It supports searching, selecting rows, columns, or block and export selected area to clipboard.

Unix pager (with very rich functionality) designed for work with tables. Designed for PostgreSQL, but MySQL is supported too. Works well with pgcli too. Can be used as CSV or TSV viewer too. It supports searching, selecting rows, columns, or block and export selected area to clipboard.

Pavel Stehule 1.9k Jan 4, 2023
Using a RP2040 Pico as a basic logic analyzer, exporting CSV data to read in sigrok / Pulseview

rp2040-logic-analyzer This project modified the PIO logic analyzer example that that was part of the Raspberry Pi Pico examples. The example now allow

Mark 62 Dec 29, 2022
Lister (Total Commander) plugin to view CSV files

csvtab-wlx is a Total Commander plugin to view CSV files. Download the latest version Features Auto-detect codepage and delimiter Column filters Sort

null 13 Dec 7, 2022
A standalone and lightweight C library

Klib: a Generic Library in C Overview Klib is a standalone and lightweight C library distributed under MIT/X11 license. Most components are independen

Attractive Chaos 3.7k Jan 8, 2023
Simple and Fast Network Utility Library

SFNUL Simple and Fast Network Utility library © binary1248 SFNUL is provided under the Mozilla Public License Version 2.0 (see LICENSE for details)

null 49 Feb 17, 2022
MojoSetup is a standalone installer for Linux

MojoSetup is a standalone installer for Linux, designed to help third-party developers that need to ship software outside of traditional package management infrastructure.

Ryan C. Gordon 38 Dec 10, 2022
Standalone MinHook wrapper for Golang.

Standalone version of GoMinHook! Credit to https://github.com/NaniteFactory/gominhook and https://github.com/TsudaKageyu/minhook as almost all of the

null 3 Jun 4, 2022
Node running standalone on PC, with interface - self-containing all dependencies

GMD Node Windows Application It is the GMD Node App for Windows packaged in a simple "one-click" installer containing all necessary dependencies. We a

Geoma COOP 3 Sep 25, 2022
Python Standalone Deploy Environment

PyStand Python 独立部署环境。Python 3.5 以后,Windows 下面都有一个 Embedded Python 的 独立 Python 运行环境,这个 PyStand 就是配合 Embedded Python 使用的。

Linwei 207 Dec 26, 2022
Small and dirty header-only library that supports user input with some more advanced features than in the standard lib.

dirty-term Small and dirty header-only library that supports user input with some more advanced features than in the standard lib. This small, lightwe

null 3 Apr 24, 2022
The alsa-lib is a library to interface with ALSA in the Linux kernel and virtual devices using a plugin system

alsa-lib only for termux android Advanced Linux Sound Architecture (ALSA) project The alsa-lib is a library to interface with ALSA in the Linux kernel

null 3 Aug 24, 2022
QtVerbalExpressions - This Qt lib is based off of the C++ VerbalExpressions library. [MIT]

QtVerbalExpressions Qt Regular Expressions made easy This Qt lib is based off of the C++ VerbalExpressions library by whackashoe. Testing if we have a

null 57 Nov 24, 2022
Lib 2d - A c++ library for paths defined by points within the 2d space

#lib_2d A c++ library for anything related to points within the 2d space (using floating point data types) using Catch as testing framework https://gi

Martin Buck 46 Dec 16, 2021
lib release of paper [TopoTag: A Robust and Scalable Topological Fiducial Marker System]

Library release of paper TopoTag: A Robust and Scalable Topological Fiducial Marker System. Project page: https://herohuyongtao.github.io/research/pub

Yongtao Hu 7 Jul 13, 2022
个人专用 ONEPLUS 5 内核,做了一些基础的反调试修改(从 maps 隐藏特定 lib,最完整最正常的 tracerPid 修改措施)

Linux kernel release 4.x <http://kernel.org/> These are the release notes for Linux version 4. Read them carefully, as they tell you what this is al

REV1SI0N 54 Dec 31, 2022
Android Dumper Lib From The Memory

LibDumper This Project Is Using For Make You Easy Dump Lib From The Memory Changelog 3.5 : fixing corrupt file after fixing elf format result dump [st

BryanGIG 31 Jan 27, 2022
Single header lib for JPEG encoding. Public domain. C99. stb style.

tiny_jpeg.h A header-only public domain implementation of Baseline JPEG compression. Features: stb-style header only library. Does not do dynamic allo

Sergio Gonzalez 212 Dec 14, 2022
A lib to encode/decode Joycon Bluetooth packet.

libjoycon A Joycon packet encoding and decoding lib Build The library itself only links to the libm (math lib): mkdir build && cd build cmake .. make

Inoki 82 Jan 5, 2023
A single-header C/C++ library for parsing and evaluation of arithmetic expressions

ceval A C/C++ header for parsing and evaluation of arithmetic expressions. [README file is almost identical to that of the ceval library] Functions ac

e_t 9 Oct 10, 2022