Действительно ли возможно управлять данными в (электронной таблице) LibreOffice calc с помощью терминальных команд. У меня есть электронная таблица с загрузками данных в формате CSV, и я хочу сделать данные manuplation от терминала, не открываясь libreoffice.
csv содержит 5 столбцов
columns
A B C D E
в котором я хочу удалить данные в B, столбец C и E затем копируют данные от столбца D до столбца B.
Затем в пустом столбце C в местоположении C5 я хочу добавить это уравнение = (B5*($B1/$A1)
) и от C6 на опеке до конца данных (C6:Cn
) Я хочу выполнить этот код =((A6+B6)*C5)
Могут подобные, управление может быть сделано с помощью только терминальные команды?
Это - файл CSV
Самый легкий путь состоит в том, чтобы сохранить файл от libreoffice в стандартизированном формате CSV, обычно с"", как разделитель и текст заключения в кавычки в ("), и сохранение формул как таковых. Ваши данные должны быть похожими на это:
7,444,5555,99,"bcdef"
22,444,5555,99,"bcdef"
Можно затем управлять этим с простой командой awk (например). Можно включать формулы в поля путем начала их с "=". Например,
5,99,"=(B5*(B1/A1))"
Вы затем читаете этот .csv файл назад в libreoffice. Обычно это должно сохранить формулы.
Вот является пример awk сценарием для управления файлом example.csv
в файл new.csv
при замене столбцов, поскольку Вы указали с Cn, имеющим формулу ((An+Bn)*C5).
awk -F, <example.csv >new.csv '
NR<=4 { printf "%s,%s\n",$1,$4 }
NR==5 { printf "%s,%s,\"%s\"\n",$1,$4,"=(B5*(B1/A1))" }
NR>=6 { printf "%s,%s,\"=((A%d+B%d)*C%d)\"\n",$1,$4,NR,NR,5; }
'
Можно преобразовать new.csv в .ods с:
libreoffice --convert-to ods new.csv
Если Ваши данные содержат"", и (") необходимо изменить разделители, используемые везде.
(Для сохранения ячеек с формулами как, csv делают: Сохранить Как, текст Типа файла CSV, галочка Изменяет Настройки Фильтра, Сохраняет, опции Field: галочка Сохраняет формулы ячейки, Кавычка галочки все текстовые ячейки.)
Я посмотрел на Ваш пример data.csv файл, и в моем обсуждении скопировал его в example.csv. Я удалил строку 1 "A, B, C, D, E" (заголовки столбцов), поскольку это мешает объяснять корреспонденцию номеров строки в файле к строкам в таблице. Я сделал это с этой командой sed:
sed -i '1{/A,B,C/d}' example.csv
Можно восстановить заголовок в конце при необходимости в нем с:
sed -i '1i\A,B,C' new.csv
Если Вы хотите на самом деле сделать арифметику формулы снаружи libreoffice, можно сделать это в awk следующим образом. awk считывает данные одна строка за один раз и выполняет каждую команду в {}. 1$ установлен на столбец 1 и так далее (как-F, столбцы средств разделяются""). Мы можем сохранить эти значения в массиве, индексированном номером строки, например, [НОМЕР] =, 1$ сохраняет столбец 1 (столбец A) НОМЕРА строки (текущая строка) в массиве A. C [НОМЕР] может быть установлен на получающееся вычисление. Мы можем затем использовать их снова в более поздних строках:
awk -F, <example.csv >new.csv '
{ A[NR]=$1; B[NR]=$4 }
NR<=4 { printf "%s,%s\n",A[NR],B[NR] }
NR==5 { C[NR] = B[5]*(B[1]/A[1]); printf "%s,%s,%s\n",A[NR],B[NR],C[NR] }
NR>=6 { C[NR] = (A[NR]+B[NR])*C[5]; printf "%s,%s,%s\n",A[NR],B[NR],C[NR] }
'