在文本文件中创建列

在文本文件中创建列

我使用了图像文本生成器从词汇表图像中提取信息,如下所示:

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

相关内容