Манипулирование данными libreoffice calc (электронная таблица) с помощью терминальных команд

Действительно ли возможно управлять данными в (электронной таблице) 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

0
задан 20 June 2015 в 07:29

1 ответ

Самый легкий путь состоит в том, чтобы сохранить файл от 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] }
'
4
ответ дан 4 October 2019 в 02:56

Другие вопросы по тегам:

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