Тем не менее, предлагаю вам предоставить дополнительную информацию, чтобы вы могли получить лучший совет.
Во-первых, вы можете рассмотреть возможность обновления до версии 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 ).
Предполагается, что все 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