我知道有人问过类似的问题,但似乎对我不起作用。我尝试过 odt2txt、unoconv 和转换为 .csv 而不是 .txt。我需要找到一种方法(在 bash 脚本内)将 ods 文件更改为 txt 文件,其中 ods 中的所有列都使用制表符分隔符正确分布,并且行也位于正确的位置。但迄今为止的每一次尝试都错误地转换了文件。
提前致谢
我将提供一个示例输入和输出,但本质上我只是希望它们看起来相同,但输入是 ods 中的多列,输出具有相同的列,但作为制表符分隔的文本文件。
某些列之间会有一些空行(以防这可能导致问题)
答案1
使用egunoconv
将其转换为CSV,然后将CSV 转换为制表符分隔的列。
unoconv
下面是一个使用Python 实现此目的的Bash 脚本:
#!/bin/bash
if [ $# -lt 1 -o "$1" = "-h" -o "$1" = "--help" ]; then
exec >&2
printf '\n'
printf 'Usage: %s [ -h | --help ]\n' "$0"
printf ' %s FILE.ods [ ... ] [ > output.txt ]\n' "$0"
printf '\n'
exit 0
fi
unoconv --stdout -f csv "$@" | python -c '
import sys
import csv
from string import maketrans
whitespace = maketrans("\t\r\n", " ")
def fix(s):
return str(s).translate(whitespace)
for row in csv.reader(sys.stdin):
print("\t".join(map(fix, row)))'
这个是偏执的,因为它确保字段不包含制表符或换行符(如果确实出现,则用空格替换),否则会混淆输出。
如果您将以上内容(暂时)保存为ods2tsv
,则可以使用以下命令安装它
sudo install -o root -g root -m u=rwx,g=rx,o=rx ods2tsv /usr/bin/ods2tsv
你可以使用它,例如
ods2tsv somefile.ods > your.txt