eBay's TSV Utilities: Command line tools for large, tabular data files. Filtering, statistics, sampling, joins and more.

Overview

Command line utilities for tabular data files

This is a set of command line utilities for manipulating large tabular data files. Files of numeric and text data commonly found in machine learning and data mining environments. Filtering, sampling, statistics, joins, and more.

These tools are especially useful when working with large data sets. They run faster than other tools providing similar functionality, often by significant margins. See Performance Studies for comparisons with other tools.

File an issue if you have problems, questions or suggestions.

In this README:

Additional documents:

Talks and blog posts:

GitHub Workflow Status Codecov GitHub release Github commits (since latest release) GitHub last commit license

Tools overview

These tools perform data manipulation and statistical calculations on tab delimited data. They are intended for large files. Larger than ideal for loading entirely in memory in an application like R, but not so big as to necessitate moving to Hadoop or similar distributed compute environments. The features supported are useful both for standalone analysis and for preparing data for use in R, Pandas, and similar toolkits.

The tools work like traditional Unix command line utilities such as cut, sort, grep and awk, and are intended to complement these tools. Each tool is a standalone executable. They follow common Unix conventions for pipeline programs. Data is read from files or standard input, results are written to standard output. Fields are identified either by field name or field number. The field separator defaults to TAB, but any character can be used. Input and output is UTF-8, and all operations are Unicode ready, including regular expression match (tsv-filter). Documentation is available for each tool by invoking it with the --help option. Most tools provide a --help-verbose option offering more extensive, reference style documentation. TSV format is similar to CSV, see Comparing TSV and CSV formats for the differences.

The rest of this section contains descriptions of each tool. Click on the links below to jump directly to one of the tools. Full documentation is available in the Tools Reference. The first tool listed, tsv-filter, provides a tutorial introduction to features found throughout the toolkit.

  • tsv-filter - Filter lines using numeric, string and regular expression comparisons against individual fields.
  • tsv-select - Keep a subset of columns (fields). Like cut, but supporting named fields, field reordering, and field exclusions.
  • tsv-uniq - Filter out duplicate lines using either the full line or individual fields as a key.
  • tsv-summarize - Summary statistics on selected fields, against the full data set or grouped by key.
  • tsv-sample - Sample input lines or randomize their order. A number of sampling methods are available.
  • tsv-join - Join lines from multiple files using fields as a key.
  • tsv-pretty - Print TSV data aligned for easier reading on the command-line.
  • csv2tsv - Convert CSV files to TSV.
  • tsv-split - Split data into multiple files. Random splits, random splits by key, and splits by blocks of lines.
  • tsv-append - Concatenate TSV files. Header-aware; supports source file tracking.
  • number-lines - Number the input lines.
  • keep-header - Run a shell command in a header-aware fashion.

tsv-filter

Filter lines by running tests against individual fields. Multiple tests can be specified in a single call. A variety of numeric and string comparison tests are available, including regular expressions.

Consider a file having 4 fields: id, color, year, count. Using tsv-pretty to view the first few lines:

$ tsv-pretty data.tsv | head -n 5
 id  color   year  count
100  green   1982    173
101  red     1935    756
102  red     2008   1303
103  yellow  1873    180

The following command finds all entries where 'year' (field 3) is 2008:

$ tsv-filter -H --eq year:2008 data.tsv

The -H option indicates the first input line is a header. The --eq operator performs a numeric equality test. String comparisons are also available. The following command finds entries where 'color' (field 2) is "red":

$ tsv-filter -H --str-eq color:red data.tsv

Fields can also be identified by field number, same as traditional Unix tools. This works for files with and without header lines. The following commands are equivalent to the previous two:

$ tsv-filter -H --eq 3:2008 data.tsv
$ tsv-filter -H --str-eq 2:red data.tsv

Multiple tests can be specified. The following command finds red entries with year between 1850 and 1950:

$ tsv-filter -H --str-eq color:red --ge year:1850 --lt year:1950 data.tsv

Viewing the first few results produced by this command:

$ tsv-filter -H --str-eq color:red --ge year:1850 --lt year:1950 data.tsv | tsv-pretty | head -n 5
 id  color  year  count
101  red    1935    756
106  red    1883   1156
111  red    1907   1792
114  red    1931   1412

The --count option switches from filtering to counting matched records. Header lines are excluded from the count. The following command prints the number of red entries in data.tsv (there are nine):

$ tsv-filter -H --count --str-eq color:red data.tsv
9

The --label option is another alternative to filtering. In this mode, a new field is added to every record indicating if it satisfies the criteria. The next command marks records to indicate if year is in the 1900s:

$  tsv-filter -H --label 1900s --ge year:1900 --lt year:2000 data.tsv | tsv-pretty | head -n 5
 id  color   year  count  1900s
100  green   1982    173      1
101  red     1935    756      1
102  red     2008   1303      0
103  yellow  1873    180      0

The --label-values option can be used to customize the values used to mark records.

Files can be placed anywhere on the command line. Data will be read from standard input if a file is not specified. The following commands are equivalent:

$ tsv-filter -H --str-eq color:red --ge year:1850 --lt year:1950 data.tsv
$ tsv-filter data.tsv -H --str-eq color:red --ge year:1850 --lt year:1950
$ cat data.tsv | tsv-filter -H --str-eq color:red --ge year:1850 --lt year:1950

Multiple files can be provided. Only the header line from the first file will be kept when the -H option is used:

$ tsv-filter -H data1.tsv data2.tsv data3.tsv --str-eq 2:red --ge 3:1850 --lt 3:1950
$ tsv-filter -H *.tsv --str-eq 2:red --ge 3:1850 --lt 3:1950

Numeric comparisons are among the most useful tests. Numeric operators include:

  • Equality: --eq, --ne (equal, not-equal).
  • Relational: --lt, --le, --gt, --ge (less-than, less-equal, greater-than, greater-equal).

Several filters are available to help with invalid data. Assume there is a messier version of the 4-field file where some fields are not filled in. The following command will filter out all lines with an empty value in any of the four fields:

$ tsv-filter -H messy.tsv --not-empty 1-4

The above command uses a "field list" to run the test on each of fields 1-4. The test can be "inverted" to see the lines that were filtered out:

$ tsv-filter -H messy.tsv --invert --not-empty 1-4 | head -n 5 | tsv-pretty
 id  color   year  count
116          1982     11
118  yellow          143
123  red              65
126                   79

There are several filters for testing characteristics of numeric data. The most useful are:

  • --is-numeric - Test if the data in a field can be interpreted as a number.
  • --is-finite - Test if the data in a field can be interpreted as a number, but not NaN (not-a-number) or infinity. This is useful when working with data where floating point calculations may have produced NaN or infinity values.

By default, all tests specified must be satisfied for a line to pass a filter. This can be changed using the --or option. For example, the following command finds records where 'count' (field 4) is less than 100 or greater than 1000:

$ tsv-filter -H --or --lt 4:100 --gt 4:1000 data.tsv | head -n 5 | tsv-pretty
 id  color  year  count
102  red    2008   1303
105  green  1982     16
106  red    1883   1156
107  white  1982      0

A number of string and regular expression tests are available. These include:

  • Equality: --str-eq, --str-ne
  • Partial match: --str-in-fld, --str-not-in-fld
  • Relational operators: --str-lt, --str-gt, etc.
  • Case insensitive tests: --istr-eq, --istr-in-fld, etc.
  • Regular expressions: --regex, --not-regex, etc.
  • Field length: --char-len-lt, --byte-len-gt, etc.

The earlier --not-empty example uses a "field list". Fields lists specify a set of fields and can be used with most operators. For example, the following command ensures that fields 1-3 and 7 are less-than 100:

$ tsv-filter -H --lt 1-3,7:100 file.tsv

Field names can be used in field lists as well. The following command selects lines where both 'color' and 'count' fields are not empty:

$ tsv-filter -H messy.tsv --not-empty color,count

Field names can be matched using wildcards. The previous command could also be written as:

$ tsv-filter -H messy.tsv --not-empty 'co*'

The co* matches both the 'color' and 'count' fields. (Note: Single quotes are used to prevent the shell from interpreting the asterisk character.)

All TSV Utilities tools use the same syntax for specifying fields. See Field syntax in the Tools Reference document for details.

Bash completion is especially helpful with tsv-filter. It allows quickly seeing and selecting from the different operators available. See bash completion on the Tips and tricks page for setup information.

tsv-filter is perhaps the most broadly applicable of the TSV Utilities tools, as dataset pruning is such a common task. It is stream oriented, so it can handle arbitrarily large files. It is fast, quite a bit faster than other tools the author has tried. (See the "Numeric row filter" and "Regular expression row filter" tests in the 2018 Benchmark Summary.)

This makes tsv-filter ideal for preparing data for applications like R and Pandas. It is also convenient for quickly answering simple questions about a dataset.

See the tsv-filter reference for more details and the full list of operators.

tsv-select

A version of the Unix cut utility with the ability to select fields by name, drop fields, and reorder fields. The following command writes the date and time fields from a pair of files to standard output:

$ tsv-select -H -f date,time file1.tsv file2.tsv

Fields can also be selected by field number:

$ tsv-select -f 4,2,9-11 file1.tsv file2.tsv

Fields can be listed more than once, and fields not specified can be selected as a group using --r|rest. Fields can be dropped using --e|exclude.

The --H|header option turns on header processing. This enables specifying fields by name. Only the header from the first file is retained when multiple input files are provided.

Examples:

$ # Output fields 2 and 1, in that order.
$ tsv-select -f 2,1 data.tsv

$ # Output the 'Name' and 'RecordNum' fields.
$ tsv-select -H -f Name,RecordNum data.tsv.

$ # Drop the first field, keep everything else.
$ tsv-select --exclude 1 file.tsv

$ # Drop the 'Color' field, keep everything else.
$ tsv-select -H --exclude Color file.tsv

$ # Move the 'RecordNum' field to the start of the line.
$ tsv-select -H -f RecordNum --rest last data.tsv

$ # Move field 1 to the end of the line.
$ tsv-select -f 1 --rest first data.tsv

$ # Output a range of fields in reverse order.
$ tsv-select -f 30-3 data.tsv

$ # Drop all the fields ending in '_time'
$ tsv-select -H -e '*_time' data.tsv

$ # Multiple files with header lines. Keep only one header.
$ tsv-select data*.tsv -H --fields 1,2,4-7,14

See the tsv-select reference for details on tsv-select. See Field syntax for more information on selecting fields by name.

tsv-uniq

Similar in spirit to the Unix uniq tool, tsv-uniq filters a dataset so there is only one copy of each unique line. tsv-uniq goes beyond Unix uniq in a couple ways. First, data does not need to be sorted. Second, equivalence can be based on a subset of fields rather than the full line.

tsv-uniq can also be run in 'equivalence class identification' mode, where lines with equivalent keys are marked with a unique id rather than filtered out. Another variant is 'number' mode, which generates line numbers grouped by the key.

tsv-uniq operates on the entire line when no fields are specified. This is a useful alternative to the traditional sort -u or sort | uniq paradigms for identifying unique lines in unsorted files, as it is quite a bit faster, especially when there are many duplicate lines. As a bonus, order of the input lines is retained.

Examples:

$ # Unique a file based on the full line.
$ tsv-uniq data.tsv

$ # Unique a file with fields 2 and 3 as the key.
$ tsv-uniq -f 2,3 data.tsv

$ # Unique a file using the 'RecordID' field as the key.
$ tsv-uniq -H -f RecordID data.tsv

An in-memory lookup table is used to record unique entries. This ultimately limits the data sizes that can be processed. The author has found that datasets with up to about 10 million unique entries work fine, but performance starts to degrade after that. Even then it remains faster than the alternatives.

See the tsv-uniq reference for details.

tsv-summarize

tsv-summarize performs statistical calculations on fields. For example, generating the sum or median of a field's values. Calculations can be run across the entire input or can be grouped by key fields. Consider the file data.tsv:

color   weight
red     6
red     5
blue    15
red     4
blue    10

Calculations of the sum and mean of the weight column is shown below. The first command runs calculations on all values. The second groups them by color.

$ tsv-summarize --header --sum weight --mean weight data.tsv
weight_sum  weight_mean
40          8

$ tsv-summarize --header --group-by color --sum weight --mean color data.tsv
color  weight_sum  weight_mean
red    15          5
blue   25          12.5

Multiple fields can be used as the --group-by key. The file's sort order does not matter, there is no need to sort in the --group-by order first. Fields can be specified either by name or field number, like other tsv-utils tools.

See the tsv-summarize reference for the list of statistical and other aggregation operations available.

tsv-sample

tsv-sample randomizes line order (shuffling) or selects random subsets of lines (sampling) from input data. Several methods are available, including shuffling, simple random sampling, weighted random sampling, Bernoulli sampling, and distinct sampling. Data can be read from files or standard input. These sampling methods are made available through several modes of operation:

  • Shuffling - The default mode of operation. All lines are read in and written out in random order. All orderings are equally likely.
  • Simple random sampling (--n|num N) - A random sample of N lines are selected and written out in random order. The --i|inorder option preserves the original input order.
  • Weighted random sampling (--n|num N, --w|weight-field F) - A weighted random sample of N lines are selected using weights from a field on each line. Output is in weighted selection order unless the --i|inorder option is used. Omitting --n|num outputs all lines in weighted selection order (weighted shuffling).
  • Sampling with replacement (--r|replace, --n|num N) - All lines are read in, then lines are randomly selected one at a time and written out. Lines can be selected multiple times. Output continues until N samples have been output.
  • Bernoulli sampling (--p|prob P) - A streaming form of sampling. Lines are read one at a time and selected for output using probability P. e.g. -p 0.1 specifies that 10% of lines should be included in the sample.
  • Distinct sampling (--k|key-fields F, --p|prob P) - Another streaming form of sampling. However, instead of each line being subject to an independent selection choice, lines are selected based on a key contained in each line. A portion of keys are randomly selected for output, with probability P. Every line containing a selected key is included in the output. Consider a query log with records consisting of triples. It may be desirable to sample records for one percent of the users, but include all records for the selected users.

tsv-sample is designed for large data sets. Streaming algorithms make immediate decisions on each line. They do not accumulate memory and can run on infinite length input streams. Both shuffling and sampling with replacement read the entire dataset all at once and are limited by available memory. Simple and weighted random sampling use reservoir sampling and only need to hold the specified sample size (--n|num) in memory. By default, a new random order is generated every run, but options are available for using the same randomization order over multiple runs. The random values assigned to each line can be printed, either to observe the behavior or to run custom algorithms on the results.

See the tsv-sample reference for further details.

tsv-join

Joins lines from multiple files based on a common key. One file, the 'filter' file, contains the records (lines) being matched. The other input files are scanned for matching records. Matching records are written to standard output, along with any designated fields from the filter file. In database parlance this is a hash semi-join. This is similar to the "stream-static" joins available in Spark Structured Streaming and "KStream-KTable" joins in Kafka. (The filter file plays the same role as the Spark static dataset or Kafka KTable.)

Example:

$ tsv-join -H --filter-file filter.tsv --key-fields Country,City --append-fields Population,Elevation data.tsv

This reads filter.tsv, creating a lookup table keyed on the Country and City fields. data.tsv is read, lines with a matching key are written to standard output with the Population and Elevation fields from filter.tsv appended. This is an inner join. Left outer joins and anti-joins are also supported.

Common uses for tsv-join are to join related datasets or to filter one dataset based on another. Filter file entries are kept in memory, this limits the ultimate size that can be handled effectively. The author has found that filter files up to about 10 million lines are processed effectively, but performance starts to degrade after that.

See the tsv-join reference for details.

tsv-pretty

tsv-pretty prints TSV data in an aligned format for better readability when working on the command-line. Text columns are left aligned, numeric columns are right aligned. Floats are aligned on the decimal point and precision can be specified. Header lines are detected automatically. If desired, the header line can be repeated at regular intervals. An example, first printed without formatting:

$ cat sample.tsv
Color   Count   Ht      Wt
Brown   106     202.2   1.5
Canary Yellow   7       106     0.761
Chartreuse	1139	77.02   6.22
Fluorescent Orange	422     1141.7  7.921
Grey	19	140.3	1.03

Now with tsv-pretty, using header underlining and float formatting:

$ tsv-pretty -u -f sample.tsv
Color               Count       Ht     Wt
-----               -----       --     --
Brown                 106   202.20  1.500
Canary Yellow           7   106.00  0.761
Chartreuse           1139    77.02  6.220
Fluorescent Orange    422  1141.70  7.921
Grey                   19   140.30  1.030

See the tsv-pretty reference for details.

csv2tsv

csv2tsv does what you expect: convert CSV data to TSV. Example:

$ csv2tsv data.csv > data.tsv

A strict delimited format like TSV has many advantages for data processing over an escape oriented format like CSV. However, CSV is a very popular data interchange format and the default export format for many database and spreadsheet programs. Converting CSV files to TSV allows them to be processed reliably by both this toolkit and standard Unix utilities like awk and sort.

Note that many CSV files do not use escapes, and in-fact follow a strict delimited format using comma as the delimiter. Such files can be processed reliably by this toolkit and Unix tools by specifying the delimiter character. However, when there is doubt, using a csv2tsv converter adds reliability.

csv2tsv differs from many csv-to-tsv conversion tools in that it produces output free of CSV escapes. Many conversion tools produce data with CSV style escapes, but switching the field delimiter from comma to TAB. Such data cannot be reliably processed by Unix tools like cut, awk, sort, etc.

csv2tsv avoids escapes by replacing TAB and newline characters in the data with a single space. These characters are rare in data mining scenarios, and space is usually a good substitute in cases where they do occur. The replacement strings are customizable to enable alternate handling when needed.

The csv2tsv converter often has a second benefit: regularizing newlines. CSV files are often exported using Windows newline conventions. csv2tsv converts all newlines to Unix format.

See Comparing TSV and CSV formats for more information on CSV escapes and other differences between CSV and TSV formats.

There are many variations of CSV file format. See the csv2tsv reference for details of the format variations supported by this tool.

tsv-split

tsv-split is used to split one or more input files into multiple output files. There are three modes of operation:

  • Fixed number of lines per file (--l|lines-per-file NUM): Each input block of NUM lines is written to a new file. This is similar to the Unix split utility.

  • Random assignment (--n|num-files NUM): Each input line is written to a randomly selected output file. Random selection is from NUM files.

  • Random assignment by key (--n|num-files NUM, --k|key-fields FIELDS): Input lines are written to output files using fields as a key. Each unique key is randomly assigned to one of NUM output files. All lines with the same key are written to the same file.

By default, files are written to the current directory and have names of the form part_NNN , with NNN being a number and being the extension of the first input file. If the input file is file.txt, the names will take the form part_NNN.txt. The output directory and file names are customizable.

Examples:

$ # Split a file into files of 10,000 lines each. Output files
$ # are written to the 'split_files/' directory.
$ tsv-split data.txt --lines-per-file 10000 --dir split_files

$ # Split a file into 1000 files with lines randomly assigned.
$ tsv-split data.txt --num-files 1000 --dir split_files

# Randomly assign lines to 1000 files using field 3 as a key.
$ tsv-split data.tsv --num-files 1000 -key-fields 3 --dir split_files

See the tsv-split reference for more information.

tsv-append

tsv-append concatenates multiple TSV files, similar to the Unix cat utility. It is header-aware, writing the header from only the first file. It also supports source tracking, adding a column indicating the original file to each row.

Concatenation with header support is useful when preparing data for traditional Unix utilities like sort and sed or applications that read a single file.

Source tracking is useful when creating long/narrow form tabular data. This format is used by many statistics and data mining packages. (See Wide & Long Data - Stanford University or Hadley Wickham's Tidy data for more info.)

In this scenario, files have been used to capture related data sets, the difference between data sets being a condition represented by the file. For example, results from different variants of an experiment might each be recorded in their own files. Retaining the source file as an output column preserves the condition represented by the file. The source values default to the file names, but this can be customized.

See the tsv-append reference for the complete list of options available.

number-lines

A simpler version of the Unix nl program. It prepends a line number to each line read from files or standard input. This tool was written primarily as an example of a simple command line tool. The code structure it uses is the same as followed by all the other tools. Example:

$ number-lines myfile.txt

Despite its original purpose as a code sample, number-lines turns out to be quite convenient. It is often useful to add a unique row ID to a file, and this tool does this in a manner that maintains proper TSV formatting.

See the number-lines reference for details.

keep-header

A convenience utility that runs Unix commands in a header-aware fashion. It is especially useful with sort. sort does not know about headers, so the header line ends up wherever it falls in the sort order. Using keep-header, the header line is output first and the rest of the sorted file follows. For example:

$ # Sort a file, keeping the header line at the top.
$ keep-header myfile.txt -- sort

The command to run is placed after the double dash (--). Everything after the initial double dash is part of the command. For example, sort --ignore-case is run as follows:

$ # Case-insensitive sort, keeping the header line at the top.
$ keep-header myfile.txt -- sort --ignore-case

Multiple files can be provided, only the header from the first is retained. For example:

$ # Sort a set of files in reverse order, keeping only one header line.
$ keep-header *.txt -- sort -r

keep-header is especially useful for commands like sort and shuf that reorder input lines. It is also useful with filtering commands like grep, many awk uses, and even tail, where the header should be retained without filtering or evaluation.

Examples:

$ # 'grep' a file, keeping the header line without needing to match it.
$ keep-header file.txt -- grep 'some text'

$ # Print the last 10 lines of a file, but keep the header line
$ keep-header file.txt -- tail

$ # Print lines 100-149 of a file, plus the header
$ keep-header file.txt -- tail -n +100 | head -n 51

$ # Sort a set of TSV files numerically on field 2, keeping one header.
$ keep-header *.tsv -- sort -t $'\t' -k2,2n

$ # Same as the previous example, but using the 'tsv-sort-fast' bash
$ # script described on the "Tips and Tricks" page.
$ keep-header *.tsv -- tsv-sort-fast -k2,2n

See the keep-header reference for more information.


Obtaining and installation

There are several ways to obtain the tools: prebuilt binaries; building from source code; and installing using the DUB package manager.

The tools are tested on Linux and MacOS. Windows users are encouraged to use either Windows Subsystem for Linux (WSL) or Docker for Windows and run Linux builds of the tools. See issue #317 for the status of Windows builds.

Prebuilt binaries

Prebuilt binaries are available for Linux and Mac, these can be found on the Github releases page. Download and unpack the tar.gz file. Executables are in the bin directory. Add the bin directory or individual tools to the PATH environment variable. As an example, the 2.2.0 releases for Linux and MacOS can be downloaded and unpacked with these commands:

$ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.2.0/tsv-utils-v2.2.0_linux-x86_64_ldc2.tar.gz | tar xz
$ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.2.0/tsv-utils-v2.2.0_osx-x86_64_ldc2.tar.gz | tar xz

See the Github releases page for the latest release.

For some distributions a package can directly be installed:

Distribution Command
Arch Linux pacaur -S tsv-utils (see tsv-utils)

Note: The distributions above are not updated as frequently as the Github releases page.

Build from source files

Download a D compiler. These tools have been tested with the DMD and LDC compilers on MacOS and Linux. Use DMD version 2.088.1 or later, LDC version 1.18.0 or later.

Clone this repository, select a compiler, and run make from the top level directory:

$ git clone https://github.com/eBay/tsv-utils.git
$ cd tsv-utils
$ make         # For LDC: make DCOMPILER=ldc2

Executables are written to tsv-utils/bin, place this directory or the executables in the PATH. The compiler defaults to DMD, this can be changed on the make command line (e.g. make DCOMPILER=ldc2). DMD is the reference compiler, but LDC produces faster executables. (For some tools LDC is quite a bit faster than DMD.)

The makefile supports other typical development tasks such as unit tests and code coverage reports. See Building and makefile for more details.

For fastest performance, use LDC with Link Time Optimization (LTO) and Profile Guided Optimization (PGO) enabled:

$ git clone https://github.com/eBay/tsv-utils.git
$ cd tsv-utils
$ make DCOMPILER=ldc2 LDC_LTO_RUNTIME=1 LDC_PGO=2
$ # Run the test suite
$ make test-nobuild DCOMPILER=ldc2

The above requires LDC 1.9.0 or later. See Building with Link Time Optimization for more information. The prebuilt binaries are built using LTO and PGO, but these must be explicitly enabled when building from source. LTO and PGO are still early stage technologies, issues may surface in some system configurations. Running the test suite (shown above) is a good way to detect issues that may arise.

Install using DUB

If you are a D user you likely use DUB, the D package manager. DUB comes packaged with DMD starting with DMD 2.072. You can install and build using DUB as follows (replace 2.2.0 with the current version):

$ dub fetch tsv-utils --cache=local
$ cd tsv-utils-2.2.0/tsv-utils
$ dub run    # For LDC: dub run -- --compiler=ldc2

The dub run command compiles all the tools. The executables are written to tsv-utils/bin. Add this directory or individual executables to the PATH.

See Building and makefile for more information about the DUB setup.

The applications can be built with LTO and PGO when source code is fetched by DUB. However, the DUB build system does not support this. make must be used instead. See Building with Link Time Optimization.

Setup customization

There are a number of simple ways to improve the utility of these tools, these are listed on the Tips and tricks page. Bash aliases, Unix sort command customization, and bash completion are especially useful.

Comments
  • Bulding tsv-utils with LTO and PGO on Archlinux

    Bulding tsv-utils with LTO and PGO on Archlinux

    Hi,

    As per our conversation, building tsv-utils with LTO and PGO on Archlinux fails. Below is the output for trying to compile current master with just LTO.

    $ make DCOMPILER=ldc2 LDC_LTO_RUNTIME=1
    
    make -C common 
    make[1]: Entering directory '/tmp/tsv-utils/common'
    make[1]: 'release' is up to date.
    make[1]: Leaving directory '/tmp/tsv-utils/common'
    
    make -C csv2tsv 
    make[1]: Entering directory '/tmp/tsv-utils/csv2tsv'
    ldc2 -release -O3 -boundscheck=off -singleobj -flto=thin -odobj  -defaultlib=phobos2-ldc-lto,druntime-ldc-lto  -of/tmp/tsv-utils/bin/csv2tsv -I/tmp/tsv-utils/common/src/tsv_utils/common /tmp/tsv-utils/csv2tsv/src/tsv_utils/csv2tsv.d /tmp/tsv-utils/common/src/tsv_utils/common/utils.d /tmp/tsv-utils/common/src/tsv_utils/common/numerics.d /tmp/tsv-utils/common/src/tsv_utils/common/fieldlist.d /tmp/tsv-utils/common/src/tsv_utils/common/getopt_inorder.d /tmp/tsv-utils/common/src/tsv_utils/common/unittest_utils.d /tmp/tsv-utils/common/src/tsv_utils/common/tsvutils_version.d
    /usr/bin/ld.gold: error: cannot find -lphobos2-ldc-lto-shared
    /usr/bin/ld.gold: error: cannot find -ldruntime-ldc-lto-shared
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function ldc.register_dso: error: undefined reference to '_d_dso_registry'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt12endOfOptionsAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt12endOfOptionsAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt13configuration20stopOnFirstNonOptionMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt10optionCharw'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt13configuration8bundlingMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt10optionCharw'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt8optMatchFNfAyaMQeKQhSQBhQBg13configurationZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_arraycatT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5ascii7isUpperFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5ascii7isUpperFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5range10primitives__T5emptyTAyaZQlFNaNbNdNiNfMKQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_aApplycd2'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_arraycatnTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std4conv10parseErrorFNaNfLAyaQdmZCQBjQBi13ConvException'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_throw_exception'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_eh_enter_catch'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_throw_exception'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5range10primitives__T5emptyTAyaZQlFNaNbNdNiNfMKQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_throw_exception'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_D3std5ascii7isAlphaFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_D3std6getopt10optionCharw'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_d_arrayappendcTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPbZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_d_arrayappendcTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt12endOfOptionsAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt12endOfOptionsAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt13configuration20stopOnFirstNonOptionMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt10optionCharw'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt13configuration8bundlingMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std6getopt8optMatchFNfAyaMQeKQhSQBhQBg13configurationZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_arraycatT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_arraycatT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5range10primitives__T5emptyTAyaZQlFNaNbNdNiNfMKQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_D3std5range10primitives__T5emptyTAyaZQlFNaNbNdNiNfMKQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_aApplycd2'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_arraycatnTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_throw_exception'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFNfAyaQlKAQhKSQBwQBv13configurationbZb: error: undefined reference to '_d_eh_enter_catch'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_D3std5ascii7isAlphaFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_d_arrayappendcTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFAyaQjKAQhKSQBuQBt13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_d_arrayappendcTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFAyaQjKAQhKSQBuQBt13configurationbZ12__dgliteral7MFNaNbNfZAxa: error: undefined reference to '_D12TypeInfo_Axa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPaZQsFAyaQjKAQhKSQBuQBt13configurationbZ12__dgliteral7MFNaNbNfZAxa: error: undefined reference to '_d_arraycatnTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_D3std6getopt13configuration20stopOnFirstNonOptionMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_D3std6getopt13configuration8bundlingMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_D3std6getopt8optMatchFNfAyaMQeKQhSQBhQBg13configurationZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_d_arraycatT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_aApplycd2'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFNfQjQmKAQpKSQBxQBw13configurationbZb: error: undefined reference to '_d_arraycatnTX'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFQhQkKAQnKSQBvQBu13configurationbZ14__foreachbody6MFNfKmKwZi: error: undefined reference to '_D3std5ascii7isAlphaFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6getopt__T12handleOptionTPAyaZQuFQhQkKAQnKSQBvQBu13configurationbZ12__dgliteral7MFNaNbNfZAxa: error: undefined reference to '_D12TypeInfo_Axa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T4textTAyaTxaZQnFNaNbNfQqxaZQv: error: undefined reference to '_D3std5array__T8appenderTAyaZQoFNaNbNfZSQBmQBl__T8AppenderTQBiZQo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_d_allocclass'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_d_allocclass'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T6encodeVEQu8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0ZQDdFNaNfJG4awZm: error: undefined reference to '_D3std3utf12UTFException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCnQCmQCl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D9tsv_utils6common5utils11InputSource11__fieldDtorMFNeZv: error: undefined reference to '_D3std5stdio4File6__dtorMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAyaZQo13ensureAddableMFNaNbNfmZv: error: undefined reference to '_d_newitemT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAyaZQo13ensureAddableMFNaNbNfmZv: error: undefined reference to '_D4core6memory2GC6extendFNaNbPvmmxC8TypeInfoZm'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAyaZQo13ensureAddableMFNaNbNfmZv: error: undefined reference to '_D4core6memory2GC6qallocFNaNbmkxC8TypeInfoZSQBqQBo8BlkInfo_'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_d_allocclass'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAyaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std5stdio4File17lockingTextWriterMFNfZSQBoQBnQBk17LockingTextWriter'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__ctorMFNaNbNcNiNfIAaZSQCdQCc__TQByTaZQCe'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T9getNthIntVAyaa13_696e7465676572207769647468TQBiTQBmZQCbFNaNfkQBzQCcZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T9getNthIntVAyaa17_696e746567657220707265636973696f6eTQBqTQBuZQCjFNaNfkQChQCkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T9getNthIntVAyaa13_696e7465676572207769647468TQBiTQBmZQCbFNaNfkQBzQCcZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T9getNthIntVAyaa17_696e746567657220707265636973696f6eTQBqTQBuZQCjFNaNfkQChQCkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T9getNthIntVAyaa21_736570617261746f72206469676974207769647468TQByTQCcZQCrFNaNfkQCpQCsZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTQCtTQCxZQDjFNaNfkQDkQDnZw'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std9exception__T7enforceHTCQBc6format15FormatExceptionZ__TQBqTbZQBwFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std9exception__T7enforceHTCQBc6format15FormatExceptionZ__TQBqTbZQBwFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format15FormatException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_d_allocclass'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format15FormatException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format15FormatException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std4conv__T4textTAyaThTaTaTQkTmZQvFNaNbNfQyhaaQBdmZQBi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std6format15FormatException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCtQCsQCo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8writeflnTaTAyaTQeZQtMFNfIAaQqQsZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTAxaZQjMFNfMQlZv: error: undefined reference to '_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTxwZQiMFNfxwZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter26highSurrogateShouldBeEmptyMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File17LockingTextWriter__T3putTxwZQiMFNfxwZv: error: undefined reference to '_D3std5stdio4File17LockingTextWriter7handle_MFNdNeZPS4core4stdcQCf8_IO_FILE'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D3std5array__T8appenderTAyaZQoFNaNbNfZSQBmQBl__T8AppenderTQBiZQo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D11TypeInfo_Aa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_d_newarrayU'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D11TypeInfo_Aa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_d_newarrayU'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D3std9exception14ErrnoException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D3std9exception14ErrnoException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D3std9exception14ErrnoException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D12TypeInfo_Axa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_d_newarrayU'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5stdio4File__T8rawWriteTaZQmMFNfIAaZv: error: undefined reference to '_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAaZQn13ensureAddableMFNaNbNfmZv: error: undefined reference to '_d_newitemT'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAaZQn13ensureAddableMFNaNbNfmZv: error: undefined reference to '_D4core6memory2GC6extendFNaNbPvmmxC8TypeInfoZm'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std5array__T8AppenderTAaZQn13ensureAddableMFNaNbNfmZv: error: undefined reference to '_D4core6memory2GC6qallocFNaNbmkxC8TypeInfoZSQBqQBo8BlkInfo_'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std4path14isDirSeparatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std4path14isDirSeparatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std4path14isDirSeparatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std4path14isDirSeparatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt11splitAndGetFNaNbNeAyaZSQBkQBj6Option'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_aaGetY'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_aaGetY'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D12TypeInfo_Aya6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException8__mixin16__ctorMFNaNbNiNfAyaC6object9ThrowableQvmZCQDcQDbQCx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt9setConfigFNaNbNiNfKSQBgQBf13configurationEQCcQCb6configZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt11splitAndGetFNaNbNeAyaZSQBkQBj6Option'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_aaGetY'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_aaGetY'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D12TypeInfo_Aya6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException8__mixin16__ctorMFNaNbNiNfAyaC6object9ThrowableQvmZCQDcQDbQCx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt9setConfigFNaNbNiNfKSQBgQBf13configurationEQCcQCb6configZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt11splitAndGetFNaNbNeAyaZSQBkQBj6Option'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D12TypeInfo_Aya6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException8__mixin16__ctorMFNaNbNiNfAyaC6object9ThrowableQvmZCQDcQDbQCx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt11splitAndGetFNaNbNeAyaZSQBkQBj6Option'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D12TypeInfo_Aya6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt15GetOptException8__mixin16__ctorMFNaNbNiNfAyaC6object9ThrowableQvmZCQDcQDbQCx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration8requiredMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt9setConfigFNaNbNiNfKSQBgQBf13configurationEQCcQCb6configZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt9setConfigFNaNbNiNfKSQBgQBf13configurationEQCcQCb6configZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration11passThroughMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration20stopOnFirstNonOptionMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt20defaultGetoptPrinterFAyaASQBnQBm6OptionZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt20defaultGetoptPrinterFAyaASQBnQBm6OptionZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File17lockingTextWriterMFNfZSQBoQBnQBk17LockingTextWriter'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File6__dtorMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std6getopt13configuration16keepEndOfOptionsMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std9exception__T7enforceZ__TQmTbZQrFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea22_636f72652e737464632e737464696f2e7374646f7574ZQDgFNbNcNdNiZSQEhQEg4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File10__postblitMFNbNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File10__postblitMFNbNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File6__dtorMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea21_636f72652e737464632e737464696f2e737464696eZQDeFNbNcNdNiZSQEfQEe4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File10__postblitMFNbNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File6__ctorMFNcNfAyaMAxaZSQBlQBkQBh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File10__postblitMFNbNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File7byChunkMFAhZSQBdQBcQz11ByChunkImpl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File6__dtorMFNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl15__fieldPostblitMFNbNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl11__fieldDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl5emptyMxFNbNdZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl5frontMFNbNdZAh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl8popFrontMFZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl5emptyMxFNbNdZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File11ByChunkImpl11__fieldDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5array__T8appenderTAyaZQoFNaNbNfZSQBmQBl__T8AppenderTQBiZQo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std9exception__T7enforceHTCQBc6format15FormatExceptionZ__TQBqTbZQBwFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D6object9Exception6__ctorMFNaNbNiNfAyaQdmCQBp9ThrowableZCQBx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D9Exception6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D12TypeInfo_Axa6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_d_newarrayU'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D6object9Exception6__ctorMFNaNbNiNfAyaQdmCQBp9ThrowableZCQBx'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File17LockingTextWriter10__aggrDtorMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_d_eh_enter_catch'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio13trustedStdoutFNdNeZSQBgQBf4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea21_636f72652e737464632e737464696f2e737464696eZQDeFNbNcNdNiZSQEfQEe4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio4File5flushMFNeZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea22_636f72652e737464632e737464696f2e737464657272ZQDgFNbNcNdNiZSQEhQEg4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_d_eh_enter_catch'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _Dmain: error: undefined reference to '_D3std5stdio__T10makeGlobalVEQBbQBa13StdFileHandlea22_636f72652e737464632e737464696f2e737464657272ZQDgFNbNcNdNiZSQEhQEg4File'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function main: error: undefined reference to '_d_run_main'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFNaKQlKmZw: error: undefined reference to '_D3std3utf12isValidDcharFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ10invalidUTFMFNaNbZCQFgQFf12UTFException: error: undefined reference to '_D3std3utf12UTFException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ10invalidUTFMFNaNbZCQFgQFf12UTFException: error: undefined reference to '_D3std3utf12UTFException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ10invalidUTFMFNaNbZCQFgQFf12UTFException: error: undefined reference to '_D3std3utf12UTFException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ10invalidUTFMFNaNbZCQFgQFf12UTFException: error: undefined reference to '_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ11outOfBoundsMFNaNbZCQFhQFg12UTFException: error: undefined reference to '_D3std3utf12UTFException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ11outOfBoundsMFNaNbZCQFhQFg12UTFException: error: undefined reference to '_D3std3utf12UTFException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ11outOfBoundsMFNaNbZCQFhQFg12UTFException: error: undefined reference to '_D3std3utf12UTFException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFKQjKmZ11outOfBoundsMFNaNbZCQFhQFg12UTFException: error: undefined reference to '_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T8textImplTAyaTwTwZQsFNaNfwwZQs: error: undefined reference to '_D3std5array__T8appenderTAyaZQoFNaNbNfZSQBmQBl__T8AppenderTQBiZQo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTbZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTbZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTbZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTbZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException8__mixin26__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCyQCxQCv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTaZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTaZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTaZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std4conv__T9convErrorTAyaTaZQrFNaNfQnQpmZCQBrQBq13ConvException: error: undefined reference to '_D3std4conv13ConvException8__mixin26__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCyQCxQCv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFNaQkKmZw: error: undefined reference to '_D3std3utf12isValidDcharFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ10invalidUTFMFNaNbZCQFfQFe12UTFException: error: undefined reference to '_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std3utf__T10decodeImplVbi1VEQBd8typecons__T4FlagVAyaa19_7573655265706c6163656d656e744463686172ZQCai0TAxaZQDrFQiKmZ11outOfBoundsMFNaNbZCQFgQFf12UTFException: error: undefined reference to '_D3std3utf12UTFException6__ctorMFNaNbNfAyamQemC6object9ThrowableZCQCmQClQCk'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T10FormatSpecTaZQp__T17writeUpToNextSpecTSQCd5stdio4File17LockingTextWriterZQCdMFNlNfKQBtZb: error: undefined reference to '_D3std9exception__T7enforceHTCQBc6format15FormatExceptionZ__TQBqTbZQBwFNaNfbLAxaAyamZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T10FormatSpecTaZQp__T17writeUpToNextSpecTSQCd5stdio4File17LockingTextWriterZQCdMFNlNfKQBtZb: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6fillUpMFNaNlNfZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5stdio4File17LockingTextWriterTaTAyaTQeZQCjFKQBxMxAaQtQvZ12__dgliteral6MFNaNbNiNfZAxa: error: undefined reference to '_D3std4conv__T4textTAyaTaZQmFNaNbNfQpaZQt'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5stdio4File17LockingTextWriterTaTAyaTQeZQCjFKQBxMxAaQtQvZ12__dgliteral7MFNaNbNiNfZAxa: error: undefined reference to '_D3std4conv__T4textTAyaTaZQmFNaNbNfQpaZQt'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T19needToSwapEndianessTaZQyFNaNbNiNfMKxSQCbQCa__T10FormatSpecTaZQpZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__ctorMFNaNbNcNiNfIAaZSQCdQCc__TQByTaZQCe'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni11isGraphicalFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni11isGraphicalFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__ctorMFNaNbNcNiNfIAaZSQCdQCc__TQByTaZQCe'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T2toTiZ__TQjTkZQoFNaNfkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T2toTiZ__TQjTkZQoFNaNfkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T2toTiZ__TQjTkZQoFNaNfkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMFNaNbNdNiNfbZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T2toTiZ__TQjTkZQoFNaNfkZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhZQqFNaNbNfQtQvQxZQBa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std4conv__T4textTAyaThTaTaTQkTmZQvFNaNbNfQyhaaQBdmZQBi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T11formatRangeTSQBd5stdio4File17LockingTextWriterTAyaTaZQCdFNfKQBwKQrMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format15FormatException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCtQCsQCo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni19isRegionalIndicatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangLFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni6hangLVFNaNbNdNiNfZySQBdQBc__T4TrieTSQBtQBs__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDjQDi__T9sliceBitsVmi13Vmi21ZQvTSQErQEq__TQBiVmi8Vmi13ZQBvTSQFsQFr__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa6__ctorMNgFNaNbNcNiNfPNgmZNgSQDrQDq__TQDpTQDdVmi16ZQEc'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa7opIndexMNgFNaNbNimZQCh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy6__ctorMNgFNaNbNcNiNfPNgmZNgSQDpQDo__TQDnTQDbVmi1ZQDz'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy7opIndexMNgFNaNbNimZQCf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangVFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni7hangLVTFNaNbNdNiNfZySQBeQBd__T4TrieTSQBuQBt__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDkQDj__T9sliceBitsVmi13Vmi21ZQvTSQEsQEr__TQBiVmi8Vmi13ZQBvTSQFtQFs__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa6__ctorMNgFNaNbNcNiNfPNgmZNgSQDrQDq__TQDpTQDdVmi16ZQEc'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa7opIndexMNgFNaNbNimZQCh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy6__ctorMNgFNaNbNcNiNfPNgmZNgSQDpQDo__TQDnTQDbVmi1ZQDz'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy7opIndexMNgFNaNbNimZQCf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangTFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni19isRegionalIndicatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangLFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangVFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangTFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangVFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni6hangLVFNaNbNdNiNfZySQBdQBc__T4TrieTSQBtQBs__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDjQDi__T9sliceBitsVmi13Vmi21ZQvTSQErQEq__TQBiVmi8Vmi13ZQBvTSQFsQFr__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa6__ctorMNgFNaNbNcNiNfPNgmZNgSQDrQDq__TQDpTQDdVmi16ZQEc'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa7opIndexMNgFNaNbNimZQCh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy6__ctorMNgFNaNbNcNiNfPNgmZNgSQDpQDo__TQDnTQDbVmi1ZQDz'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy7opIndexMNgFNaNbNimZQCf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni7hangLVTFNaNbNdNiNfZySQBeQBd__T4TrieTSQBuQBt__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDkQDj__T9sliceBitsVmi13Vmi21ZQvTSQEsQEr__TQBiVmi8Vmi13ZQBvTSQFtQFs__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa6__ctorMNgFNaNbNcNiNfPNgmZNgSQDrQDq__TQDpTQDdVmi16ZQEc'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTkVmi13ZQsVmi16ZQCa7opIndexMNgFNaNbNimZQCh'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy6__ctorMNgFNaNbNcNiNfPNgmZNgSQDpQDo__TQDnTQDbVmi1ZQDz'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni__T13PackedPtrImplTSQBcQBb__T9BitPackedTbVmi1ZQrVmi1ZQBy7opIndexMNgFNaNbNimZQCf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni18graphemeExtendTrieFNaNbNdNiNfZySQBqQBp__T4TrieTSQCgQCf__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDwQDv__T9sliceBitsVmi13Vmi21ZQvTSQFeQFd__TQBiVmi8Vmi13ZQBvTSQGfQGe__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni6mcTrieFNaNbNdNiNfZySQBdQBc__T4TrieTSQBtQBs__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDjQDi__T9sliceBitsVmi13Vmi21ZQvTSQErQEq__TQBiVmi8Vmi13ZQBvTSQFsQFr__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAyaTaZQCeFNfKQBwQqMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flZeroMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flPlusMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flHashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flHashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp7flSpaceMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp11flSeparatorMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp11flSeparatorMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp11flSeparatorMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std9exception14ErrnoException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std9exception14ErrnoException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std9exception14ErrnoException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formatUnsignedTSQBg5stdio4File17LockingTextWriterTmTaZQCeFNfKQBumMKxSQDhQDg__T10FormatSpecTaZQpkbZv: error: undefined reference to '_D3std9exception14ErrnoException6__ctorMFNfAyaQdmZCQBxQBwQBp'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni19isRegionalIndicatorFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangLFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni6hangLVFNaNbNdNiNfZySQBdQBc__T4TrieTSQBtQBs__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDjQDi__T9sliceBitsVmi13Vmi21ZQvTSQErQEq__TQBiVmi8Vmi13ZQBvTSQFsQFr__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangVFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std3uni7hangLVTFNaNbNdNiNfZySQBeQBd__T4TrieTSQBuQBt__T9BitPackedTbVmi1ZQrTwVmi1114112TSQDkQDj__T9sliceBitsVmi13Vmi21ZQvTSQEsQEr__TQBiVmi8Vmi13ZQBvTSQFtQFs__TQCjVmi0Vmi8ZQCvZQFf'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std8internal14unicode_tables7isHangTFNaNbNiNfwZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T12writeAlignedTSQBe5stdio4File17LockingTextWriterTAwTaZQCdFNfKQBvQpMKxSQDhQDg__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6flDashMxFNaNbNdNiNfZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T15formatValueImplTSQBh5stdio4File17LockingTextWriterTkTaZQCfFNfKQBukMKxSQDiQDh__T10FormatSpecTaZQpZv: error: undefined reference to '_D3std6format__T19needToSwapEndianessTaZQyFNaNbNiNfMKxSQCbQCa__T10FormatSpecTaZQpZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5stdio4File17LockingTextWriterTaTkZQCeFKQBsMxAakZ12__dgliteral5MFNaNbNiNfZAxa: error: undefined reference to '_D3std4conv__T4textTAyaTaZQmFNaNbNfQpaZQt'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTkZQDdFNaNfkkZw: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhTQkTkZQvFNaNbNfQyQBaQBdQBgkZQBl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTkZQDdFNaNfkkZw: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhZQqFNaNbNfQtQvQxZQBa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTkZQDdFNaNfkkZw: error: undefined reference to '_D3std6format15FormatException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCtQCsQCo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5stdio4File17LockingTextWriterTaTkZQCeFKQBsMxAakZ12__dgliteral6MFNaNbNiNfZAxa: error: undefined reference to '_D3std4conv__T4textTAyaTaZQmFNaNbNfQpaZQt'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp6__ctorMFNaNbNcNiNfIAaZSQCdQCc__TQByTaZQCe'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp__T17writeUpToNextSpecTSQCd5array__T8AppenderTAyaZQoZQByMFNaNlNfKQBqZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T14formatIntegralTSQBg5array__T8AppenderTAyaZQoTmTaZQBzFNaNfKQBrxmMKxSQDfQDe__T10FormatSpecTaZQpkmZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T10FormatSpecTaZQp__T17writeUpToNextSpecTSQCd5array__T8AppenderTAyaZQoZQByMFNaNlNfKQBqZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T11formatValueTSQBd5array__T8AppenderTAyaZQoTQhTaZQBxFNaNfKQBsKQzMKxSQDeQDd__T10FormatSpecTaZQpZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format__T19needToSwapEndianessTaZQyFNaNbNiNfMKxSQCbQCa__T10FormatSpecTaZQpZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std5range10primitives__T3putTSQBf5array__T8AppenderTAyaZQoTxaZQBmFNaNbNfKQBsxaZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std5range10primitives__T3putTSQBf5array__T8AppenderTAyaZQoTxaZQBmFNaNbNfKQBsxaZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std5range10primitives__T3putTSQBf5array__T8AppenderTAyaZQoTxaZQBmFNaNbNfKQBsxaZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std5range10primitives__T3putTSQBf5array__T8AppenderTAyaZQoTxaZQBmFNaNbNfKQBsxaZv'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv__T4textTAyaThTaTaTQkTmZQvFNaNbNfQyhaaQBdmZQBi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhTQkTkZQvFNaNbNfQyQBaQBdQBgkZQBl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhZQqFNaNbNfQtQvQxZQBa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std6format15FormatException6__ctorMFNaNbNiNfAyaQdmC6object9ThrowableZCQCtQCsQCo'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv21ConvOverflowException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv21ConvOverflowException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv21ConvOverflowException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T14formattedWriteTSQBg5array__T8AppenderTAyaZQoTaTQjTmZQCcFNaNfKQBuMxAaQBemZk: error: undefined reference to '_D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaQdmZCQCdQCcQCa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__TQkTaTAyaTmZQvFIAaQmmZ12__dgliteral5MFNaNbNiNfZAxa: error: undefined reference to '_D3std4conv__T4textTAyaTkTQgTmTQlZQuFNaNbNfQxkQBamQBeZQBi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTQCtTmZQDhFNaNfkQDimZw: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhTQkTkZQvFNaNbNfQyQBaQBdQBgkZQBl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTQCtTmZQDhFNaNfkQDimZw: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhTQkTkZQvFNaNbNfQyQBaQBdQBgkZQBl'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa19_736570617261746f7220636861726163746572SQCq6traits10isSomeCharTwTQCtTmZQDhFNaNfkQDimZw: error: undefined reference to '_D3std4conv__T4textTAyaTQeTQhZQqFNaNbNfQtQvQxZQBa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa13_696e7465676572207769647468SQCe6traits10isIntegralTiTQChTmZQCvFNaNfkQCwmZi: error: undefined reference to '_D3std4conv21ConvOverflowException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa13_696e7465676572207769647468SQCe6traits10isIntegralTiTQChTmZQCvFNaNfkQCwmZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa13_696e7465676572207769647468SQCe6traits10isIntegralTiTQChTmZQCvFNaNfkQCwmZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa13_696e7465676572207769647468SQCe6traits10isIntegralTiTQChTmZQCvFNaNfkQCwmZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaQdmZCQCdQCcQCa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa17_696e746567657220707265636973696f6eSQCm6traits10isIntegralTiTQCpTmZQDdFNaNfkQDemZi: error: undefined reference to '_D3std4conv21ConvOverflowException7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa17_696e746567657220707265636973696f6eSQCm6traits10isIntegralTiTQCpTmZQDdFNaNfkQDemZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa17_696e746567657220707265636973696f6eSQCm6traits10isIntegralTiTQCpTmZQDdFNaNfkQDemZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:function _D3std6format__T6getNthVAyaa17_696e746567657220707265636973696f6eSQCm6traits10isIntegralTiTQCpTmZQDdFNaNfkQDemZi: error: undefined reference to '_D3std4conv21ConvOverflowException6__ctorMFNaNbNfAyaQdmZCQCdQCcQCa'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D15TypeInfo_HAyaAv6__initZ: error: undefined reference to '_D25TypeInfo_AssociativeArray6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D15TypeInfo_HAyaAv6__initZ: error: undefined reference to '_D11TypeInfo_Av6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D29TypeInfo_AS3std6getopt6Option6__initZ: error: undefined reference to '_D14TypeInfo_Array6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D28TypeInfo_S3std6getopt6Option6__initZ: error: undefined reference to '_D15TypeInfo_Struct6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D28TypeInfo_S3std6getopt6Option6__initZ: error: undefined reference to '_D3std6getopt6Option9__xtoHashFNbNeKxSQBkQBjQBfZm'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D28TypeInfo_S3std6getopt6Option6__initZ: error: undefined reference to '_D3std6getopt6Option11__xopEqualsFKxSQBjQBiQBeKxQmZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D13TypeInfo_AAya6__initZ: error: undefined reference to '_D14TypeInfo_Array6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D11TypeInfo_xm6__initZ: error: undefined reference to '_D14TypeInfo_Const6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D11TypeInfo_xm6__initZ: error: undefined reference to '_D10TypeInfo_m6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D11TypeInfo_xb6__initZ: error: undefined reference to '_D14TypeInfo_Const6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D11TypeInfo_xb6__initZ: error: undefined reference to '_D10TypeInfo_b6__initZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D12TypeInfo_xAa6__initZ: error: undefined reference to '_D14TypeInfo_Const6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std9exception12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std6format12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5range12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5regex12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5stdio12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std6traits12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std8typecons12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5regex8internal12backtracking12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5regex8internal6parser12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5array12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std10functional12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std4conv12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std9algorithm8mutation12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std9algorithm10comparison12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std6string12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std5regex8internal8thompson12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D4core8internal5array5utils12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D4core6memory12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common9fieldlist12__ModuleInfoZ: error: undefined reference to '_D3std3uni12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common8numerics12__ModuleInfoZ: error: undefined reference to '_D3std6traits12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common8numerics12__ModuleInfoZ: error: undefined reference to '_D3std5range12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange7__ClassZ: error: undefined reference to '_D14TypeInfo_Class6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange7__ClassZ: error: undefined reference to '_D6Object7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange6__vtblZ: error: undefined reference to '_D6object6Object8toStringMFZAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange6__vtblZ: error: undefined reference to '_D6object6Object6toHashMFNbNeZm'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange6__vtblZ: error: undefined reference to '_D6object6Object5opCmpMFCQqZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils16InputSourceRange6__vtblZ: error: undefined reference to '_D6object6Object8opEqualsMFCQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource7__ClassZ: error: undefined reference to '_D14TypeInfo_Class6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource7__ClassZ: error: undefined reference to '_D6Object7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource6__vtblZ: error: undefined reference to '_D6object6Object8toStringMFZAya'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource6__vtblZ: error: undefined reference to '_D6object6Object6toHashMFNbNeZm'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource6__vtblZ: error: undefined reference to '_D6object6Object5opCmpMFCQqZi'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils11InputSource6__vtblZ: error: undefined reference to '_D6object6Object8opEqualsMFCQtZb'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D44TypeInfo_S3std5array__T8AppenderTAyaZQo4Data6__initZ: error: undefined reference to '_D15TypeInfo_Struct6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D43TypeInfo_S3std5array__T8AppenderTAaZQn4Data6__initZ: error: undefined reference to '_D15TypeInfo_Struct6__vtblZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils12__ModuleInfoZ: error: undefined reference to '_D3std5range12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils12__ModuleInfoZ: error: undefined reference to '_D3std5stdio12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils12__ModuleInfoZ: error: undefined reference to '_D3std6traits12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils12__ModuleInfoZ: error: undefined reference to '_D3std8typecons12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils6common5utils12__ModuleInfoZ: error: undefined reference to '_D3std9exception12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std5stdio12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std9exception12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std6format12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std5range12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std6traits12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std8typecons12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std4path12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std9algorithm8mutation12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std4conv12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std5array12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D4core6memory12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D4core8internal5array5utils12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std9algorithm10comparison12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std10functional12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std6string12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:_D9tsv_utils7csv2tsv12__ModuleInfoZ: error: undefined reference to '_D3std3uni12__ModuleInfoZ'
    /tmp/lto-llvm-8b1aea.o(.data+0x0): error: undefined reference to '_D6object9Throwable7__ClassZ'
    /tmp/lto-llvm-8b1aea.o(.data+0x8): error: undefined reference to '_D9Exception7__ClassZ'
    /tmp/lto-llvm-8b1aea.o:tsvutils_version.d:DW.ref._d_eh_personality: error: undefined reference to '_d_eh_personality'
    collect2: error: ld returned 1 exit status
    Error: /usr/bin/cc failed with status: 1
    make[1]: *** [../makeapp.mk:18: /tmp/tsv-utils/bin/csv2tsv] Error 1
    make[1]: Leaving directory '/tmp/tsv-utils/csv2tsv'
    make: *** [makefile:96: csv2tsv] Error 2
    

    ldc2.conf contains the following on Archlinux:

    default:
    {
        // default switches injected before all explicit command-line switches
        switches = [
            "-defaultlib=phobos2-ldc,druntime-ldc","-link-defaultlib-shared"
        ];
        // default switches appended after all explicit command-line switches
        post-switches = [
            "-I/usr/include/dlang/ldc",
        ];
        // default directories to be searched for libraries when linking
        lib-dirs = [
            "/usr/lib",
        ];
        // default rpath when linking against the shared default libs
        rpath = "/usr/lib";
    };
    
    bug fixed/done 
    opened by rymrg 14
  • Significant digits/rounding

    Significant digits/rounding

    Numbers like 9830.76111111 and 18421.40625 are rather unfriendly for humans. It'd be nice to be able to specify significant digits for mean/median/mad/et al.

    enhancement fixed/done 
    opened by Llammissar 12
  • Statically linked binaries for Linux

    Statically linked binaries for Linux

    It would be nice if the pre-compiled binaries for Linux were statically linked. This would allow them to work on a more variety of Linux distributions and versions. Since it looks like there are no external dependencies it should be pretty simple when compiling with LDC to just add the -static flag.

    enhancement fixed/done 
    opened by jacob-carlborg 9
  • Compute quantiles of columns

    Compute quantiles of columns

    Hi,

    Just wondering if it's possible to implement a function for computing any given quantile of a column with tsv-summarize. I use datamash a lot and computing any given quantile is feature I'm missing there as well (it can compute the standard quartiles, however). If the functionality is already in tsv-summarize, sorry for not finding out about it in my cursory glance through the documentation.

    enhancement fixed/done 
    opened by boulund 9
  • Compilation error, tsv-filter: undefined reference

    Compilation error, tsv-filter: undefined reference

    My system install of dmd is v2.068.1. Also tried it with the latest version of dmd (v.2.071.0). I cloned the repository and in the repo root issued make:

    [code]$ git clone https://github.com/eBay/tsv-utils-dlang
    Cloning into 'tsv-utils-dlang'...                                      
    remote: Counting objects: 89, done.                                    
    remote: Compressing objects: 100% (60/60), done.                       
    remote: Total 89 (delta 11), reused 89 (delta 11), pack-reused 0       
    Unpacking objects: 100% (89/89), done.                                 
    Checking connectivity... done.                            
    
    [code]$ cd tsv-utils-dlang/                              
    [tsv-utils-dlang]$ make                                                             
    
    make -C common                                                                                    
    make[1]: Entering directory `/home/boulund/code/tsv-utils-dlang/common'                           
    make[1]: `release' is up to date.                                                                 
    make[1]: Leaving directory `/home/boulund/code/tsv-utils-dlang/common'                            
    
    make -C number-lines                                                                              
    make[1]: Entering directory `/home/boulund/code/tsv-utils-dlang/number-lines'                     
    dmd -release -O -inline -boundscheck=off -odobj  -of/home/boulund/code/tsv-utils-dlang/bin/number-lines -I/home/boulund/code/tsv-utils-dlang/common/src src/number-lines.d                          
    make[1]: Leaving directory `/home/boulund/code/tsv-utils-dlang/number-lines'                      
    
    make -C tsv-select                                                                                
    make[1]: Entering directory `/home/boulund/code/tsv-utils-dlang/tsv-select'                       
    dmd -release -O -inline -boundscheck=off -odobj  -of/home/boulund/code/tsv-utils-dlang/bin/tsv-select -I/home/boulund/code/tsv-utils-dlang/common/src src/tsv-select.d /home/boulund/code/tsv-utils-dlang/common/src/tsvutil.d                                                                        
    make[1]: Leaving directory `/home/boulund/code/tsv-utils-dlang/tsv-select'                        
    
    make -C tsv-filter                                                                                
    make[1]: Entering directory `/home/boulund/code/tsv-utils-dlang/tsv-filter'                       
    dmd -release -O -inline -boundscheck=off -odobj  -of/home/boulund/code/tsv-utils-dlang/bin/tsv-filter -I/home/boulund/code/tsv-utils-dlang/common/src src/tsv-filter.d                              
    obj/tsv-filter.o: In function `_D10tsv_filter9istrInFldFxAAamAywZb':                              
    src/tsv-filter.d:(.text._D10tsv_filter9istrInFldFxAAamAywZb+0x42): undefined reference to `_D3std9algorithm9searching49__T16simpleMindedFindVAyaa6_61203d3d2062TAxaTAywZ16simpleMindedFindFNaNfAxaAywZAxa'                                                                                            
    obj/tsv-filter.o: In function `_D10tsv_filter12istrNotInFldFxAAamAywZb':                          
    src/tsv-filter.d:(.text._D10tsv_filter12istrNotInFldFxAAamAywZb+0x42): undefined reference to `_D3std9algorithm9searching49__T16simpleMindedFindVAyaa6_61203d3d2062TAxaTAywZ16simpleMindedFindFNaNfAxaAywZAxa'                                                                                        
    obj/tsv-filter.o: In function `_D3std9algorithm9searching36__T4findVAyaa6_61203d3d2062TAxaTAywZ4findFNaNfAxaAywZAxa':                                                                               
    src/tsv-filter.d:(.text._D3std9algorithm9searching36__T4findVAyaa6_61203d3d2062TAxaTAywZ4findFNaNfAxaAywZAxa+0x37): undefined reference to `_D3std9algorithm9searching49__T16simpleMindedFindVAyaa6_61203d3d2062TAxaTAywZ16simpleMindedFindFNaNfAxaAywZAxa'                                           
    obj/tsv-filter.o: In function `_D3std9algorithm9searching12__T7canFindZ20__T7canFindTAxaTAywZ7canFindFNaNfAxaAywZb':
    src/tsv-filter.d:(.text._D3std9algorithm9searching12__T7canFindZ20__T7canFindTAxaTAywZ7canFindFNaNfAxaAywZb+0x37): undefined reference to `_D3std9algorithm9searching49__T16simpleMindedFindVAyaa6_61203d3d2062TAxaTAywZ16simpleMindedFindFNaNfAxaAywZAxa'                                            
    collect2: error: ld returned 1 exit status                                                        
    --- errorlevel 1                                                                                  
    make[1]: *** [/home/boulund/code/tsv-utils-dlang/bin/tsv-filter] Error 1                          
    make[1]: Leaving directory `/home/boulund/code/tsv-utils-dlang/tsv-filter'                        
    make: *** [tsv-filter] Error 2                                                                    
    
    fixed/done 
    opened by boulund 9
  • Select columns by name

    Select columns by name

    Another day, another feature request. ;)

    I was doing some ad hoc data mangling late yesterday and kept thinking it would be very useful to be able to refer to columns by name. Part of it was the constant checking of which data had which column number. Especially once I started using multiple tools in pipelines, it would have saved time to be able to just call things by name. A simple example: tsv-join -k 1,2 -f transaction-rate.tsv -a 3 average-crossover-times.tsv | tsv-select -f 1,2,7 --rest last I'd find it more readable (and thus better for use in larger scripts) to be able to do something like this: tsv-join -k cores,threads -f transaction-rate.tsv -a 't/m' average-crossover-times.tsv | tsv-select -f cores,threads,'t/m' --rest last

    enhancement fixed/done 
    opened by Llammissar 7
  • tsv-summarize: doesn't support windows line-ending

    tsv-summarize: doesn't support windows line-ending

    When aggregating the last column, the prebuilt binary for linux (v1.1.15) returns the following error:

    ' when converting from type const(char)[] to type doubleUnexpected ' File: dummy.tsv Line: 2

    I've used tsv-append, tsv-uniq and tsv-select, and each works just fine. After updating line-endings to unix, tsv-summarize works.

    bug fixed/done 
    opened by Halmaethor 6
  • Add a simple travis setup

    Add a simple travis setup

    This adds a simple .travis.yml that should help you to get started.

    More documentation can be found at:

    https://docs.travis-ci.com/user/languages/d/

    (the other Travis commands are not D-specific)

    opened by wilzbach 6
  • Good utility to test ring buffer?

    Good utility to test ring buffer?

    I have added a new type of buffer to iopipe that allows me to avoid copying at all (even when the buffer needs to be reused). It works by using some mmap magic that @DmitryOlshansky clued me into at dconf.

    However, I have discovered after getting it to work, that it's performance is pretty much equivalent to the original buffer type. The reason is that my "big test case" is byline, and byline copies very little data to begin with (and not very often). I wondered if you have any utilities that would benefit from such a buffer? Basically I'm looking for an example case that keeps a lot of data in the buffer at a time.

    If you don't have any, I'm going to implement an example of keeping N lines in buffer at once (think of a grep-style iopipe that can be used to print N lines of context around the match). I think this should show some significant difference, but I wondered if you had examples that would be relevant in this library?

    question 
    opened by schveiguy 5
  • How are characters like tab and new line handled?

    How are characters like tab and new line handled?

    When converting a CSV file to TSV? I assume there are either default alternative characters or users have to specify alternative filed/line delimiters?

    question 
    opened by dclong 4
  • bufferedByLine does not work with File due to @safe <> @system conflict

    bufferedByLine does not work with File due to @safe <> @system conflict

    This is the first time I am using tsv-utils. I am trying to compile the following chunk of code:

    import std.stdio;
    import std.typecons : Yes, No;
    import tsv_utils.common.utils : bufferedByLine;
    
    enum testFile = "test.tsv";
    
    void main(string[] args)
    {
        foreach (line; testFile.File().bufferedByLine!(Yes.keepTerminator))
        {
            writeln(line);
        }
    }
    
    

    and get the following exception:

    > dub build --single preprocessor.d --compiler=ldc2 --force
    Performing "debug" build using ldc2 for x86_64.
    mir-core 1.1.2: building configuration "library"...
    mir-algorithm 3.7.28: building configuration "default"...
    preprocessor ~master: building configuration "application"...
    C:\Users\tasty\AppData\Local\dub\packages\tsv-utils-1.6.0\tsv-utils\common\src\tsv_utils\common\utils.d(899,38): Error: @safe function tsv_utils.common.util
    s.bufferedByLine!(cast(Flag)true, char, cast(ubyte)10u, 131072LU, 16384LU).bufferedByLine.BufferedByLineImpl.popFront cannot call @system function std.stdio
    .File.rawRead!ubyte.rawRead
    C:\ldc2-1.20.0-windows-x64\bin\..\import\std\stdio.d(1076,9):        std.stdio.File.rawRead!ubyte.rawRead is declared here
    preprocessor.d(29,40): Error: template instance tsv_utils.common.utils.bufferedByLine!(cast(Flag)true, char, cast(ubyte)10u, 131072LU, 16384LU) error instan
    tiating
    ldc2 failed with exit code 1.
    

    Am I using it correctly?

    bug fixed/done Windows 
    opened by tastyminerals 3
  • Error [tsv-filter]: Not enough fields in line. File: c.tsv, Line: 1425063

    Error [tsv-filter]: Not enough fields in line. File: c.tsv, Line: 1425063

    When trying to use the --count option, or trying to output to a new tsv file, I get this error message: Error [tsv-filter]: Not enough fields in line. File: c.tsv, Line: 1425063

    EDIT: My mistake, the issue was just that there were blank lines at the end of the tsv file

    opened by alchemizt 1
  • tsv-append: limit number of rows per file? [feature request]

    tsv-append: limit number of rows per file? [feature request]

    tsv-append is useful for combining several tsv files each with a header line.

    However, very often one does this and also wants to combine only the top ki lines of the ith file (e.g. after all those files have been sorted by some criterion).

    This can of course be in several steps but since tsv-append already exists, adding a way to do this with this command would make it easy to do this in one easy to understand step.

    One way to implement this perhaps would be to make source tracking with -f optional and allow to enable "top-n" processing:

    • enable top-n processing using -T/--topn
    • if -t is specified, specify each file as -f STR=FILE:N
    • if -t is not specified, specify each file as -f FILE:N
    • alternately, specify files without -f as FILE:N

    So whenever -T/--topn is specified, if a file ends in ":[0-9]+" then this suffix is used to specify the number of top data rows to include (maximally, if the file is shorter, include everything there is).

    opened by johann-petrak 0
  • Ability to produce proper CSV files

    Ability to produce proper CSV files

    We have a need to clean up CSV files and produce comma delimited files (not tab delimited). If the data has commas embedded in the fields, those fields should be quoted.

    Currently it's possible to set the tsv-delimiter to comma, but this would also replace any commas in the source data with spaces, which is not what we want.

    The goal of this exercise is to basically go from QUOTE_ALL to QUOTE_MINIMAL for the CSV files.

    opened by dangeReis 0
  • -bash: ./tsv-pretty: cannot execute binary file

    -bash: ./tsv-pretty: cannot execute binary file

    Hi,

    Thanks for your tool. When I use the lastest verison:

    tsv-utils-v2.2.1_osx-x86_64_ldc2 reports error.

    -bash: ./tsv-pretty: cannot execute binary file
    

    Best, xiucz

    opened by xiucz 1
Releases(v2.2.1)
  • v2.2.0(Mar 14, 2021)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.2.0/tsv-utils-v2.2.0_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.2.0/tsv-utils-v2.2.0_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 2.2.0 Changes:

    • tsv-filter: New feature, count matches rather than filtering (--c|count). This option causes the number of matching lines to be printed rather than the individual matching lines.
    • tsv-filter: New feature, marking records rather than filtering (--label). This option causes every record to be marked with an indication of whether it satisfied the test. Marking is done by appending a new field with an indicator value. See PR #338 for details.
    • New option: Line buffering, available in most tools (--line-buffered). This option causes each line to read and written as soon as it is available. This overrides the default buffering behavior. This is useful when reading from slow input streams. See PR #336 for details.

    Other Changes

    • Prebuilt binaries have been updated to use LDC compiler version ldc-1.24.0.
    • Changes to the LDC build parameters to better support Archlinux and other platforms. See PR #329.
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v2.2.0_linux-x86_64_ldc2.tar.gz(10.94 MB)
    tsv-utils-v2.2.0_osx-x86_64_ldc2.tar.gz(10.39 MB)
  • v2.1.2(Oct 11, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.2/tsv-utils-v2.1.2_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.2/tsv-utils-v2.1.2_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 2.1.2 Changes

    • Small performance improvement in several tools by switching from File.write to File.rawWrite. See PR #316.
    • Stopped using LDC option -disable-fp-elim. This option is no longer available starting with LDC 1.24.0 (next version) and is a required change. See PR #316.

    Prebuilt binaries have been built using the latest LDC compiler (ldc-1.23.0).

    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v2.1.2_linux-x86_64_ldc2.tar.gz(10.82 MB)
    tsv-utils-v2.1.2_osx-x86_64_ldc2.tar.gz(10.20 MB)
  • v2.1.1(Sep 14, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.1/tsv-utils-v2.1.1_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.1/tsv-utils-v2.1.1_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 2.1.1 Changes

    • Improved csv2tsv buffer utilization. Enables better performance of subsequent tasks in a pipeline due to more frequent writes to standard output (better parallelization). Minor performance benefits to csv2tsv by itself. See PR #305.
    • Code change to support an upcoming D language change (minor). A tagged release with this change is needed to support tsv-utils use in the D Language project tester. See PR #306.

    Prebuilt binaries have been built using the latest LDC compiler (ldc-1.23.0).

    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v2.1.1_linux-x86_64_ldc2.tar.gz(10.82 MB)
    tsv-utils-v2.1.1_osx-x86_64_ldc2.tar.gz(10.20 MB)
  • v2.1.0(Sep 8, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.0/tsv-utils-v2.1.0_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.1.0/tsv-utils-v2.1.0_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 2.1.0 Changes: csv2tsv

    • Performance improvements: csv2tsv is significantly faster as a result of switching to a buffer-based conversion algorithm. The 2.1.0 version runs 40-60% faster than the 2.0.0 version on tests on Mac OS, depending on the type of file. See PR #301 for details.
    • UTF-8 Byte Order Marks (BOMs) found in CSV input files are discarded when producing TSV output. See PR #302 for details.
    • TAB and Newline replacement strings can now be specified separately. Previously, only one replacement string was allowed for both newline and TAB characters in the CSV data. Now different replacements can be provided. This uses the new command line arguments --r|tab-replacement and --n|newline-replacement. See PR #303 for details.

    Other Changes

    • Prebuilt binaries have been updated to use the latest LDC compiler (ldc-1.23.0).
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v2.1.0_linux-x86_64_ldc2.tar.gz(10.82 MB)
    tsv-utils-v2.1.0_osx-x86_64_ldc2.tar.gz(10.20 MB)
  • v2.0.0(Jul 11, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.0.0/tsv-utils-v2.0.0_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v2.0.0/tsv-utils-v2.0.0_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 2.0.0 Changes: Named Field Support

    Release 2.0.0 adds named field support to all tools in the tsv-utils toolkit. This is a significant usability improvement.

    Named fields can be used with any file or data stream that has a header line. Named fields are enabled by the --H|header option. Field numbers can be used as well, just as in the prior versions of the toolkit. Glob-style wildcards can be used and escapes can be used to specify field names containing special characters.

    Details are available in the Field Syntax section of the Tools Reference manual.

    Examples - Assume a file with the header fields:

     1    test_name
     2    run
     3    elapsed_time
     4    user_time
     5    system_time
     6    max_memory
    

    Commands like the following can be used:

    $ # Select individual fields, like 'cut'
    $ tsv-select data.tsv -H -f user_time            # Field  4
    $ tsv-select data.tsv -H -f test_name,user_time  # Fields 1,4
    $ tsv-select data.tsv -H -f '*_time'             # Fields 3,4,5
    
    $ # Filter lines using numeric comparisons against individual fields
    $ tsv-filter data.tsv -H --lt elapsed_time:100
    $ tsv-filter data.tsv -H --gt elapsed_time:100 --lt system_time:20
    
    $ # Statistical summaries
    $ tsv-summarize data.tsv -H --median elapsed_time
    $ tsv-summarize data.tsv -H --median '*_time'
    $ tsv-summarize data.tsv -H --group-by test_name --median '*_time'
    
    $ # Uniq'ing on a field
    $ tsv-uniq data.tsv -H -f test_name 
    
    $ # Joins - Assume another file 'test_info.tsv' with 'test_name' and
    $ # 'expected_time' fields. A join can be performed using column names.
    $ tsv-join -H -f test_into.tsv data.tsv --key-fields test_name --append-fields expected_time
    

    See the reference docs or online help for details on specific tools. There is also documentation in the Tools Overview section of the main project README file.

    Named field support addresses enhancement request #25. It implemented via PRs #284 through #300.

    Other Changes

    • Prebuilt binaries have been updated to use the latest LDC compiler (ldc-1.22.0).
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v2.0.0_linux-x86_64_ldc2.tar.gz(10.81 MB)
    tsv-utils-v2.0.0_osx-x86_64_ldc2.tar.gz(10.18 MB)
  • v1.6.1(Apr 19, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.6.1/tsv-utils-v1.6.1_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.6.1/tsv-utils-v1.6.1_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 1.6.1 Changes:

    • Performance improvement to tsv-split --lines-per-file functionality (PR #280).
    • Bug fix: Detect command line entered field ranges ending with field zero (PR #279).
    • Bug fix: @safe attribution changes to enable Windows compilation of bufferedByLine (Issue #282, PR #283).
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.6.1_linux-x86_64_ldc2.tar.gz(10.02 MB)
    tsv-utils-v1.6.1_osx-x86_64_ldc2.tar.gz(9.22 MB)
  • v1.6.0(Mar 28, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.6.0/tsv-utils-v1.6.0_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.6.0/tsv-utils-v1.6.0_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 1.6.0 Changes:

    • Prebuilt binaries have been updated to use the latest LDC compiler (1.20.1).

    • tsv-select: New feature, the ability to exclude fields (PR #267).

      Fields to exclude are specified with the --e|exclude option. Examples:

      $ # Drop the first field, keep everything else.
      $ # Equivalent to `cut -f 2- file.tsv`
      $ tsv-select --exclude 1 file.tsv
      
      $ # Drop fields 3-10, keep everything else
      $ tsv-select --exclude 3-10 file.tsv
      

      See the tsv-select reference for more information.

    • New tool: tsv-split (PR #270)

      tsv-split is used to split one or more input files into multiple output files. There are three modes of operation:

      • Fixed number of lines per file (--l|lines-per-file NUM): Each input block of NUM lines is written to a new file. This is similar to the Unix split utility.

      • Random assignment (--n|num-files NUM): Each input line is written to a randomly selected output file. Random selection is from NUM files.

      • Random assignment by key (--n|num-files NUM, --k|key-fields FIELDS): Input lines are written to output files using fields as a key. Each unique key is randomly assigned to one of NUM output files. All lines with the same key are written to the same file.

      Examples:

      $ # Split a file into files of 10,000 lines each.
      $ tsv-split data.txt --lines-per-file 10000 --dir split_files
      
      $ # Split a file into 1000 files with lines randomly assigned.
      $ tsv-split data.txt --num-files 1000 --dir split_files
      
      # Randomly assign lines to 1000 files using field 3 as a key.
      $ tsv-split data.tsv --num-files 1000 -key-fields 3 --dir split_files
      

      See the tsv-split reference for more information.

    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.6.0_linux-x86_64_ldc2.tar.gz(10.01 MB)
    tsv-utils-v1.6.0_osx-x86_64_ldc2.tar.gz(9.20 MB)
  • v1.5.0(Feb 16, 2020)

    To download and unpack prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.5.0/tsv-utils-v1.5.0_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.5.0/tsv-utils-v1.5.0_osx-x86_64_ldc2.tar.gz | tar xz
    

    Installation instructions are in the ReleasePackageReadme.txt file in the release package.

    To be notified of new releases:

    GitHub supports notification of new releases. Click the "Watch" button on the repository page and select "Releases Only".

    Release 1.5.0 Changes:

    • Prebuilt binaries have been updated to use the latest LDC compiler (1.20.0).

    • tsv-filter: Field list support (PR #259).

      Field list provide a compact way to specify multiple fields for a command. Most tsv-utils tools already support field lists, now tsv-filter does as well. Examples:

      $ # Select lines where fields 1-10 are not empty.
      $ tsv-filter --not-empty 1-10 data.tsv
      
      $ # Select lines where fields 1-5 and 17 are less than 100
      $ tsv-filter --lt 1-5,17:100 data.tsv
      
    • tsv-filter: New field length tests based on either characters or bytes (PR #258).

      The new operators allow filtering on field length. Field length can be measured in either characters or bytes. (Characters can occupy multiple bytes in UTF-8). Examples:

      $ # Keep only lines where field 3 is less than 50 characters
      $ tsv-filter --char-len-lt 3:50 data.tsv
      
      $ # Find lines where field 5 is more than 20 bytes
      $ tsv-filter --byte-len-gt 5:20
      

      Character length tests have names of the form: --char-len-eq|ne|lt|le|gt|ge]. Byte length tests have names of the form: --byte-len-[eq|ne|lt|le|gt|ge].

    • tsv-filter: Improved error messages when invalid regular expressions are used.

      The error message printed by tsv-filter now includes the error text provided by the D regular expression engine. This is helpful when trying to debug complex regular expressions. Examples:

      $ # Old error message (tsv-filter 1.4.4)
      $ tsv-filter --regex 4:'abc(d|e' data.tsv
      [tsv-filter] Error processing command line arguments: Invalid values in option: '--regex 4:abc(d|e'. Expected: '--regex <field>:<val>' where <field> is a number and <val> is a regular expression.
      
      $ # New error message (tsv-filter 1.5.0)
      [tsv-filter] Error processing command line arguments: Invalid regular expression: '--regex 4:abc(d|e'. no matching ')'
      Pattern with error: `abc(d|e` <--HERE-- ``
         Expected: '--regex <field>:<val>' or '--regex <field-list>:<val>' where <val> is a regular expression.
      

      The formatting of the message can be improved and is likely to be updated in the future.

    • tsv-uniq: Performance improvements (PRs #234, #235).

      Better memory management and other changes improved tsv-uniq performance by 5-35% depending on the operation.

    • tsv-sample: Performance improvements reading large data blocks from standard input (PR #238).

      Sampling and shuffling operations requiring that all data be read into memory were unnecessarily slow when large amounts of data was read from standard input. Performance issues were noticed with data sizes larger than 10 GB. This is now fixed.

    • Sample bash scripts included in release package (PR #254).

      Sample versions of the tsv-sort and tsv-sort-fast scripts described on the Tips and Tricks page are now included in the repository and in prebuilt binary packages.

    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.5.0_linux-x86_64_ldc2.tar.gz(9.17 MB)
    tsv-utils-v1.5.0_osx-x86_64_ldc2.tar.gz(8.47 MB)
  • v1.4.4(Sep 23, 2019)

    Changes:

    • New tsv-sample option --i|inorder

      This option preserves input order when using simple or weighted random sampling. These sampling modes are engaged when a sample size is selected via the --n|num NUM option. Documentation was updated to better reflect the distinction between shuffling the full data set and random sampling which selects a subset of lines. (PR #226)

    • tsv-summarize --min and --max operators changed to preserve original input string

      The prior behavior of the operators was to read the values to a double, then use numeric formatting to print the recorded double. In some cases this would cause the original input to change, especially if it was a long format number, for example, 16 digits long. (PR #220)

      The prior behavior makes sense for calculations like mean and median, but not for min and max. In particular, preserving the original values allows them to be joined with or compared to the original data.

    • Prebuilt binaries have been updated to use the latest LDC compiler (1.17.0).

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.4/tsv-utils-v1.4.4_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.4/tsv-utils-v1.4.4_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.4.4_linux-x86_64_ldc2.tar.gz(9.16 MB)
    tsv-utils-v1.4.4_osx-x86_64_ldc2.tar.gz(8.42 MB)
  • v1.4.3(Aug 19, 2019)

    Two changes:

    • New tsv-pretty option --a|auto-preamble - Enables automatic detection of preambles. Lines at the start of the file that should be printed as is, without reformatting into pretty printed columns. For more information and examples see PR #218.
    • Prebuilt binaries have been updated to use the latest LDC compiler (1.16.0).

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.3/tsv-utils-v1.4.3_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.3/tsv-utils-v1.4.3_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.4.3_linux-x86_64_ldc2.tar.gz(9.09 MB)
    tsv-utils-v1.4.3_osx-x86_64_ldc2.tar.gz(8.34 MB)
  • v1.4.2(Jun 14, 2019)

    One change:

    • Fixes incorrect comma use in the dub.json file. Needed to support planned changes in dub. Also needed for dlang CI pipelines.

    There are no changes to any of the tools.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.2/tsv-utils-v1.4.2_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.2/tsv-utils-v1.4.2_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.4.2_linux-x86_64_ldc2.tar.gz(9.08 MB)
    tsv-utils-v1.4.2_osx-x86_64_ldc2.tar.gz(8.36 MB)
  • v1.4.1(Apr 7, 2019)

    This release contains one new feature and several performance improvements:

    • tsv-uniq --number - Line numbering grouped by key (new feature). The key is either the whole line or a subset of fields. Each unique key gets its own set of line numbers. See the tsv-uniq reference for details.
    • Improved I/O read performance. This was achieved by using a buffered version of std.stdio.File.byLine. Especially effective for narrow files. Tools using byLine (most of the tools) typically see a 10-40% performance gain, depending on tool and type of file (measured on OS X). Implementation documentation: tsv_utils.common.utils.bufferedByLine.
    • Updated compiler to LDC 1.15.0 for prebuilt binaries (frontend/druntime/phobos 2.085.1). This includes an update to LLVM 8.0 and a couple of improvements to memory allocation and GC collection. The latter improved performance of several of the tools, especially tools like tsv-join that allocate large amounts of memory.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.1/tsv-utils-v1.4.1_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.4.1/tsv-utils-v1.4.1_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.4.1_linux-x86_64_ldc2.tar.gz(9.08 MB)
    tsv-utils-v1.4.1_osx-x86_64_ldc2.tar.gz(8.36 MB)
  • v1.3.2(Nov 12, 2018)

    This release modifies tsv-sample random value printing so most values are printed in decimal notation, without exponents. This is for subsequent processing by GNU sort. Sorting numbers with exponents requires "general numeric" order (option 'g'), which is much slower than "numeric" order (option 'n'). See Shuffling large files on the Tips and Tricks page for more info.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.3.2/tsv-utils-v1.3.2_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.3.2/tsv-utils-v1.3.2_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.3.2_linux-x86_64_ldc2.tar.gz(11.02 MB)
    tsv-utils-v1.3.2_osx-x86_64_ldc2.tar.gz(7.99 MB)
  • v1.3.1(Nov 11, 2018)

    In this release:

    • tsv-sample: Adds full-line as key to distinct sampling. This completes the work that has been done on sampling over the last few point releases. tsv-sample now supports a fair set of sampling modes. Performance is also good, in keeping with the tradition of the other tsv-utils tools.
    • Prebuilt binaries have been updated to use the latest LDC compiler (1.12.0). This is a significant performance boost to regex search in tsv-filter. Unfortunately csv2tsv is a little slower.
    • The build system now supports using LDC's LTO compiled druntime and phobos libraries (those shipped with the compiler). This eliminates the need to download the druntime and phobos source code at build time. This is more convenient and supports package managers better.
    • Code level documentation now generates good documentation when used with the dpldocs documentation system. Go to the tsv-utils code documentation to see the result.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.3.1/tsv-utils-v1.3.1_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.3.1/tsv-utils-v1.3.1_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.3.1_linux-x86_64_ldc2.tar.gz(11.01 MB)
    tsv-utils-v1.3.1_osx-x86_64_ldc2.tar.gz(7.99 MB)
  • v1.2.3(Oct 21, 2018)

    This release add several new sampling algorithms that improve runtime performance and memory utilization for a number of sampling use-cases. There are no new forms of sampling, just additional algorithms. The new algorithms:

    • A skip sampling implementation of Bernoulli sampling.
    • An implementation of reservoir sampling "Algorithm R" used for unweighted random sampling.
    • A line order randomization algorithm based on array shuffling.

    Formal performance benchmarks have not been run. However, tests run on Mac OS as part of development show favorable results relative to other available tools, including GNU shuf.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.3/tsv-utils-v1.2.3_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.3/tsv-utils-v1.2.3_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.2.3_linux-x86_64_ldc2.tar.gz(8.72 MB)
    tsv-utils-v1.2.3_osx-x86_64_ldc2.tar.gz(8.47 MB)
  • v1.2.2(Oct 7, 2018)

    This release adds new capabilities and performance improvements to tsv-sample. Documentation was also updated to improve clarity. Key changes:

    • New feature: Simple random sampling with replacement - All lines from input sources are read in, then lines are repeated selected at random and written out. Lines can be output multiple times. The process continues until the specified number of samples has been written. Invoke using the -r|--replace and -n|--num NUM options.
    • New feature: Random value printing - A new feature was added for generating random values for all input lines. In the default case it shows the values used for Bernoulli sampling trials. It can also be used with 'distinct' sampling to show the sampling bucket a line is placed in based on the key-fields specified. This feature is invoked with the --gen-random-inorder option. A related feature, --print-random, was updated so that it is now supported by all applicable sampling modes.
    • Line order randomization performance improvements: One of the basic tsv-sample use cases is line order randomization. The case where all input lines are being permuted was re-written and is now quite a bit faster and uses less memory. This applies to both weighted and unweighted sampling. (The case where a subsampling is being done via the -n|--num option uses reservoir sampling was already fast.)
    • Command line option change - The option for specifying the probability used for Bernoulli sampling was changed from -r|--rate to -p|prob. This was done to create a more consistent set of option names for new features and features that may be added in the future.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.2/tsv-utils-v1.2.2_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.2/tsv-utils-v1.2.2_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.2.2_linux-x86_64_ldc2.tar.gz(8.71 MB)
    tsv-utils-v1.2.2_osx-x86_64_ldc2.tar.gz(7.87 MB)
  • v1.2.1(Aug 3, 2018)

    This release adds features for tsv-utils automated tests. There are no changes to any of the tools.

    The new testing features add support for different correct output results for different compiler/library versions. The main case is for changes to error message text, which in some cases includes text from the phobos library.

    Alternate test outputs were added for a planned change to Phobos in an upcoming release. This was bundled into a tagged release to support the D language project tester where tsv-utils is used.

    To download and unpack the prebuilt binaries:

    $ # Linux
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.1/tsv-utils-v1.2.1_linux-x86_64_ldc2.tar.gz | tar xz
    
    $ # MacOS
    $ curl -L https://github.com/eBay/tsv-utils/releases/download/v1.2.1/tsv-utils-v1.2.1_osx-x86_64_ldc2.tar.gz | tar xz
    
    Source code(tar.gz)
    Source code(zip)
    tsv-utils-v1.2.1_linux-x86_64_ldc2.tar.gz(8.69 MB)
    tsv-utils-v1.2.1_osx-x86_64_ldc2.tar.gz(7.84 MB)
  • v1.2.0(Jul 16, 2018)

  • v1.1.20(Jun 14, 2018)

  • v1.1.19(Mar 18, 2018)

    NOTE: Unfortunately, the pre-built binaries for v1.1.19 and earlier releases have been lost. Please use the pre-built binaries from the latest release. There is nothing wrong with the old binaries, if you downloaded one earlier you can continue to use it.

    Changes in v1.1.19:

    • tsv-uniq - New options for printing only repeated lines: --r|repeated, --a|at-least N.
    • tsv-pretty - New option for verbatim output of an initial set of lines: --a|preamble N.
    • makefile help - Bug fix in the output.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.18(Feb 25, 2018)

    NOTE: Unfortunately, the pre-built binaries for v1.1.19 and earlier releases have been lost. Please use the pre-built binaries from the latest release. There is nothing wrong with the old binaries, if you downloaded one earlier you can continue to use it.

    Changes in v1.1.18:

    • tsv-uniq - Added a --m|max option to output up to a max number of duplicate lines. The default of course is one.
    • tsv-sample - Added PGO support. Small gains, up to 5% depending on sampling method.
    • Better unit test diagnostic output on "command line" tests. This simplifies tracking down errors when tests are run on a system like TravisCI. In the past it was necessary to run the test locally to see what failed.
    • Bash completion - Fix a tsv-filter option.
    • Doc updates - Added a pair of sections to the Tips and Tricks doc. One describing TSV and CSV differences, another giving examples of using dos2unix and iconv to deal with encoding and newline issues.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.17(Jan 26, 2018)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.17:

    Most of the tools were switched to use output buffering. This is a performance enhancement that works by buffering small writes into larger blocks before writing to the final output destination, usually stdout. The amount of benefit depends on the tool and the nature of the file being processed. Narrow files (short lines) see the most benefit, and in some cases run 50% faster. More typical gains are 5-20%.

    Output buffering logic is in the BufferedOutputRange struct found in common/src/tsvutil.d. The resulting source code in each tool turns out to be quite readable.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.16(Jan 14, 2018)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.16:

    The main changes in this release are the use of Profile Guided Optimization (PGO) and the addition of new sampling methods in tsv-sample.

    Profile Guided Optimization - This is a follow-on to the Link Time Optimization work done in v1.1.15. It is based on LDC compiler support for LTO and PGO, including the ability to operate on the application code and the D standard libraries (druntime, phobos) together.

    Profile Guided Optimization uses data collected from instrumented builds to better optimize executables. The tsv utilities build process has been updated to generate and use instrumentation for several of the tools. LTO and PGO builds are enabled by options passed to make. The pre-built binaries available from the GitHub releases page are built with LTO and PGO, but they must enabled explicitly when building from source. See Building with Link Time Optimization and Profile Guided Optimization for details.

    PGO results in material performance gains (10% or more) on csv2tsv and tsv-summarize, and smaller gains (2-5%) on several other tools. Considering LTO (v1.1.15) and PGO (v1.1.16) combined, performance gains on five of six measured benchmarks ranged from 8-45% on Linux, and 6-57% on MacOS. Three of the benchmarks saw gains greater than 25% on both platforms.

    New sampling methods - Two sampling methods have been added to tsv-sample. One is a simple stream sampling mode that selects a random portion of an input stream based on a sampling rate. Another is a form of sampling known as "distinct" sampling. This selects a random portion of records based on a key in the data. For example, if records contain an IP address, sampling to take all records from 1% of the unique IP addresses. See the tsv-sample reference for details.

    Other changes

    • tsv-summarize bug fix, incorrect headers on two operations.
    • Windows line ending detection when running on Unix platforms (Issue #96)
    • tsv-select performance improvement: Avoid unnecessary memory allocation from std.array.join. A 5% performance improvement and less memory allocation.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.15(Nov 10, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.15:

    This release uses new link-time optimization (LTO) available starting with the LDC 1.5 compiler release. This improves the performance of most of the tools, typically by about 10% over the previous release, and significantly more in some cases. Benchmarks can be found in this slide deck from the Silicon Valley D Meetup, Dec 14, 2017.

    Previous releases used Thin LTO on OS X builds. LTO was not used on Linux builds. In the OS X case, LTO was used on the tsv utilities code, but not the code from the D libraries, phobos and druntime.

    The LDC 1.5 release supports LTO on both Linux and OS X out of the box, and includes support for building phobos and druntime with LTO.

    This release of the tsv utilities adds support for the new LTO capabilities to the makefiles. It is not enabled by default, but can be turned on with make arguments. The prebuilt binaries have been built with LTO turned on. For more information, see Building With LTO.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.15-beta3(Nov 5, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.15-beta3: This release uses new link-time optimization (LTO) available starting with the LDC 1.5 compiler release.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.14(Oct 19, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.14:

    No functional changes, updates to documentation only.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.13(Sep 23, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.13: New tool, tsv-pretty.

    tsv-pretty prints TSV data in an aligned fasion for command-line readability. Headers are detected automatically and numeric values aligned. An example, first without formatting:

    $ cat sample.tsv
    Color   Count   Ht      Wt
    Brown   106     202.2   1.5
    Canary Yellow   7       106     0.761
    Chartreuse	1139	77.02   6.22
    Fluorescent Orange	422     1141.7  7.921
    Grey	19	140.3	1.03
    

    Now with tsv-pretty, using header underlining and float formatting:

    $ tsv-pretty -u -f sample.tsv
    Color               Count       Ht     Wt
    -----               -----       --     --
    Brown                 106   202.20  1.500
    Canary Yellow           7   106.00  0.761
    Chartreuse           1139    77.02  6.220
    Fluorescent Orange    422  1141.70  7.921
    Grey                   19   140.30  1.030
    
    Source code(tar.gz)
    Source code(zip)
  • v1.1.12(Jun 21, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.12:

    Turn on Link Time Optimization (LTO) when using the LDC compiler on OS X. This produces faster executables. The difference is especially notable for the csv2tsv tool, which runs about 20% faster. LTO is used in the pre-built OS X binaries and will be used on OS X source code builds (git clone, dub fetch) when building with the LDC compiler.

    OS X directly supports LTO with the system linker provided by XCode (Clang / LLVM). LTO can also be used on Linux, but at present it requires installing and building special linker support. This complicates the build process, which is why it is not used on Linux by this toolset. For more information on LDC's LTO support see http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html.

    Source code(tar.gz)
    Source code(zip)
  • v1.1.11(May 8, 2017)

    NOTE: Pre-built binaries for this release are no longer available. Please use binaries from the latest release.

    Changes in v1.1.11:

    Main feature is support for field ranges. Any place a list of fields can be entered, field ranges can be used as well. A field range is a pair of field numbers separated by a hyphen. Reverse order is supported as well. Single field numbers and field ranges can be used together. Some examples:

    $ tsv-select --fields 1,2,17-33,10-7  data.tsv
    $ tsv-summarize --group-by 3-5 --median 7-17
    $ tsv-uniq --fields 7-10 data.tsv
    

    There are also some improvements to error message text.

    Source code(tar.gz)
    Source code(zip)
Owner
eBay
https://ebay.github.io/
eBay
Python CLI script to solve wordles.

Wordle Solver Python CLI script to solve wordles. You need at least python 3.8 installed to run this. No dependencies. Sample Usage Let's say the word

Rachel Brindle 1 Jan 16, 2022
Hurry is a CLI tool to speed setting up MoniGoMani HyperStrategy & co. #freqtrade #hyperopting #trading #strategy

Hurry is a CLI tool to speed setting up MoniGoMani HyperStrategy & co. #freqtrade #hyperopting #trading #strategy

10 Dec 29, 2022
Command-line search tool for GitHub

cligh is a command-line search tool for GitHub.

1 Oct 02, 2022
Very nice SMS & Mail Bomber for Termux and Linux.

Very nice SMS & Mail Bomber for Termux and Linux. Coded with love)))

nordbearbot.dev 5 Nov 06, 2022
Automaton - python script to execute bash command based on changes in size of a file.

automaton python script to execute given command = everytime size of a given file changes,hence everytime a file is modified.(almost) download automa

asrar bhat 1 Jan 03, 2022
A terminal slots programme in PY

PYSlots PyPI and Test PyPI External Links PyPI Test PyPI Install Look directly at the bugs! Version pip install pyslots "Don't look directly at the bu

Luke Batema 4 Nov 30, 2022
Pequeno joguinho pra você rodar no seu terminal

JokenPython Pequeno joguinho pra você rodar no seu terminal Olá! Joguinho legal pra vc rodar no seu terminal!! (rode no terminal, pra melhor experienc

Scott 4 Nov 25, 2021
A python CLI app that converts a mp4 file into a gif with ASCII effect added.

Video2ASCIIgif This CLI app takes in a mp4 format video, converts it to a gif with ASCII effect applied. This also includes full control over: backgro

Sriram R 6 Dec 31, 2021
Phishing-Detective is a command line application for Windows 10 built to detect a phishing site from two url's

Phishing-Detective Phishing-Detective is a command line application for Windows 10 built to detect a phishing site from two url's How it works A simpl

2 Jun 23, 2022
Wik is use to get information about anything on the shell using Wikipedia.

WIK wik is a tool to view wikipedia pages from your terminal. It also let you search for any wikipedia up to date article on one query from your termi

Yash Singh 340 Dec 18, 2022
A command line application to analyse reports from TBC Warcraft Logs.

README A command line application to analyse reports from TBC Warcraft Logs. The application was written and tested with Python 3.9. Features Dumps an

2 Dec 17, 2021
gcp-doctor - Diagnostics for Google Cloud Platform

gcp-doctor is a command-line diagnostics tool for GCP customers. It finds and helps to fix common issues in Google Cloud Platform projects. It is used to test projects against a wide range of best-pr

Google Cloud Platform 185 Dec 20, 2022
A Command Line Error Parser Built using Python.

"Stalk Overflow with debuggy" Error Parser Everything is done in Python so it's extremely easy to install and use. Supports Python 3. Debuggy is used

Derhnyel 22 Nov 10, 2022
This is a command line program to play cricket made using Python.

SimpleCricketPython This is a command line program to play cricket made using Python How it works First you have the option of selecting whether you

Imira Randeniya 1 Sep 11, 2022
CLI utility for updating the EVE Online static data export in a postgres database

EVE SDE Postgres updater CLI utility for updating the EVE Online static data export postgres database. This has been tested with the Fuzzwork postgres

Markus Juopperi 1 Oct 29, 2021
A CLI Application to detect plagiarism in Source Code Files.

Plag Description A CLI Application to detect plagiarism in Source Code Files. Features Compare source code files for plagiarism. Extract code features

default=dev 2 Nov 10, 2022
Python command line tool and python engine to label table fields and fields in data files.

Python command line tool and python engine to label table fields and fields in data files. It could help to find meaningful data in your tables and data files or to find Personal identifable informat

APICrafter 22 Dec 05, 2022
Command-line tool for downloading and extending the RedCaps dataset.

Command-line tool for downloading and extending the RedCaps dataset.

RedCaps dataset 33 Dec 14, 2022
A command line interface to buy things in stregsystemet

Stregsystemet-CLI This repository is the Stregsystemet CLI, to buy things in Stregsystemet, at AAU. Use of this cli-tool is at your own risk and there

F-klubben 14 Oct 18, 2022
A webmining CLI tool & library for python.

minet is a webmining command line tool & library for python (= 3.6) that can be used to collect and extract data from a large variety of web sources

médialab Sciences Po 165 Dec 17, 2022