Вы неправильно используете функцию system ()
. Или, скорее, это не то, что здесь использовать, поскольку он не возвращает вывод команды, а только статус выхода (вывод поступает в терминал).
Предполагая, что date
- это GNU date
, это сценарий awk
, который выполнит переформатирование даты:
BEGIN { OFS = FS = "," }
$1 {
cmd = sprintf("date -d '%s' '+%%d-%%m-%%Y' 2>/dev/null", $1);
cmd | getline $1;
print;
close(cmd);
}
Запуск:
$ awk -f script.awk data.csv
Bogført,Tekst,Beløb,Saldo
03-02-2017, random text,-425,-611524.54
Скрипт отбрасывает пустые строки ввода. Он создает командную строку cmd
, которая выполняет фактическое преобразование даты с использованием GNU date
. Ошибки от даты
будут отброшены (и $ 1
останется без изменений).
Чтобы сделать это с помощью cvssql
(из csvkit
):
$ sed '1,2d' data.csv | csvsql -H --query 'SELECT strftime("%d-%m-%Y", a), b, c, d FROM stdin' | sed '1d' >new_data.csv
Данные в new_data.csv
будут без строки заголовка. Чтобы добавить его обратно:
$ cat <( head -n 1 data.csv ) new_data.csv >even_newer_data.csv
Пакеты, не установленные через ваш дистрибутив, относятся к /opt
. Так:
sudo bash # or sudo each command
cd /tmp
tar xvf progname.tar
# use atool's aunpack to guard against tar-bombs
mkdir /opt
mv progname/ opt/
Затем создайте символическую ссылку на исполняемые файлы:
ln -s /opt/progname/bin/* /usr/local/bin
ln -s /opt/progname/lib/* /usr/local/lib
ln -s /opt/progname/include/* /usr/local/include