我使用了图像文本生成器从词汇表图像中提取信息,如下所示:
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4
生成的文本文件如下所示:
word1
word2
word3
word4
:meaning1
:meaning2
:meaning3
:meaning4
我觉得从 pdf 文档复制词汇表之类的文本时,这种情况也很常见。有没有什么方便的方法可以重新创建原始文本配置?最好创建单词和含义相连的列,如果没有单元格就更好了。
我想我正在寻找一种方法将几行的内容粘贴/附加到几行现有行的末尾。
我能想到的唯一解决方案是将所有内容粘贴到 LibreOffice Writer 中并选择列,但这只会以演示方式重新创建源文档,并且没有实际用途。
问题是:
如何将提取的文本更改为两列,以使其看起来像图片中那样:
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4
我更喜欢 GUI 工具,但非高级 CLI 解决方案也受到赞赏。
答案1
使用高级文本编辑器或 IDE,例如吉尼。
例如,使用 Geany,您可以垂直编辑文本,Ctrl
同时用鼠标选择它。
一旦选择“垂直”,只需将其粘贴在第一行的末尾,然后根据需要的列间空间按下 Tab 键多次。
答案2
使用以下命令的非高级 CLI 解决方案pr
:
$ pr -T2 < file.txt
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4
或者使用以下rs
命令:
$ rs -t 0 2 < file.txt
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4
答案3
中高级 CLI 解决方案,具有awk
:
$ cat file
word1
word2
word3
word4
:meaning1
:meaning2
:meaning3
:meaning4
基于 RegEx 模式,即前导冒号^:
或无前导冒号^[^:]
(假设一致)像这样:
$ awk '/^[^:]/ {
wrd[i++] = $0
}
/^:/ {
def[j++] = $0
}
END {
for (k = 0; k < i; k++) {
printf "%s\t%s\n", wrd[k], def[k]
}
}' file
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4
或者根据行号将文件分成前半部分和后半部分,如下所示:
$ awk '{
lines[NR] = $0
}
END {
k = NR / 2 + 1
for (j = 1; j <= NR / 2; j++) {
printf "%s\t%s\n", lines[j], lines[k++]
}
}' file
word1 :meaning1
word2 :meaning2
word3 :meaning3
word4 :meaning4