Как написать скрипт csvcut для вырезания столбца по заголовку с несколькими файлами?

Тем не менее, предлагаю вам предоставить дополнительную информацию, чтобы вы могли получить лучший совет.

Во-первых, вы можете рассмотреть возможность обновления до версии 11.3 для некоторых дополнительных функций и настроек производительности ZFS :https://blogs.oracle.com/zfs/welcome-to-oracle-solaris-113-zfs

Вы не заметили, какой SRU у вас установлен,но Solaris 11.2 и Solaris 11.1 SRU 20.5 или более поздние версии включают новый настраиваемый параметр user _backup _hint _pct, который дает подсказку о том, сколько памяти зарезервировать для использования приложением, тем самым ограничивая объем используемой памяти. кэшем ZFS ARC.

Вы можете ознакомиться с блогом Йорга:http://www.c0t0d0s0.org/archives/7757-user_reserve_hint_pct.htmlили непосредственно ознакомиться с MOS DOC Управление памятью между ZFS и приложениями в Oracle Solaris 11.x (Doc ID 1663862.1 ).

0
12.08.2019, 12:17
1 ответ

Предполагается, что все CSV-файлы, которые вы хотите обработать, имеют одинаковое количество и порядок столбцов.

#!/bin/sh

delim=$1
cols=$2

if [ -z "$delim" ] || [ -z "$cols" ]; then
    echo 'missing delimiter and/or columns' >&2
    exit 1
fi

shift 2

csvstack --delimiter "$delim" "$@" |
csvcut --columns "$cols"

Этот сценарий может принимать два или более аргумента. Первый будет символом-разделителем, второй — именем или номером столбцов для извлечения (можно использовать список с разделителями-запятыми -). Остальные аргументы используются как имена файлов для обработки.

Если задано только два аргумента, в качестве данных для обработки будет использоваться стандартный ввод.

Команда csvstackиспользуется для создания единого потока данных CSV из заданных файлов, а команда csvcutиспользуется для извлечения требуемых столбцов. Обратите внимание, что разделитель меняется на запятую в выводе csvstackиз того, что было во входе. Если вы извлекаете несколько столбцов и хотите указать определенный разделитель, передайте результат через csvformatи укажите разделитель с помощью-D(--out-delimiter).

Пример запуска:

$ cat file1.csv
a;b;c
1;2;3
$ cat file2.csv
a;b;c
4;5;6
$ sh script.sh ';' 'a,c' file*
a,c
1,3
4,6
0
28.01.2020, 03:22

Теги

Похожие вопросы