【问题标题】:formatting file using bash使用 bash 格式化文件
【发布时间】:2013-07-02 18:07:59
【问题描述】:

我有一个目录(机密),其中包含一堆文本文件。

机密

  :- Secret-file1.txt
  :- Secret-file2.txt
  :- Secret-file3.txt

我想生成另一个文本文件(Summary.txt),文本宽度为 80,格式如下

Secret-file1         - This file describes various secret activities of
                       organization Secret-Organization-1
Secret-file2         - This file describes various secret activities of
                       organization Secret-Organization-2. This summarizes
                       their activities from year 2001.
Secret-file3         - This file describes various secret activities of
                       organization Secret-Organization-3. This summarizes
                       their activities from year 2024.

其中第二列右对齐并从相应文本文件的第一行复制。例如,“Secret-file1.txt”看起来像这样

This file describes various secret activities of organization Secret-Organization-1.
XXXXXXXXXXXXXXXXX BUNCH of TEXT TILL EOF XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我该怎么做?我正在查看 bash 的各种选项(例如,sed、awk、grep、your-prefered-bash-built-in)。

谢谢

一个

【问题讨论】:

  • 抱歉,可能的解决方案是秘密
  • 在我看来,您需要提取每个文件的第一行(headsed),然后格式化准备缩进(fmt?不清楚有一个标准的文字包装器),然后安排处理每个格式化的输出,因此第一行前面是文件名和破折号,其余部分是相应数量的空格。

标签: bash sed awk


【解决方案1】:

这是我想到的最简单的事情,因为您没有写出您尝试过的内容,所以我将可能的调整留给您,但我相信这是一个好的开始;)

for file in "*"; do echo "$file\t\t$(head -1 "$file")"; done

【讨论】:

    【解决方案2】:

    你可以用几行 Python 干净地做到这一点:

    #!/usr/bin/env python3.3
    
    import glob
    import textwrap
    from os.path import basename
    
    INDENT=' ' * 22
    
    for filename in glob.glob("Confidential/*.txt"):
        with open(filename, 'r') as secret:
            print("{:20s}- {}\n".format(
                basename(filename),
                '\n'.join(textwrap.wrap(secret.readline(),
                                        width=74,
                                        initial_indent=INDENT,
                                        subsequent_indent=INDENT)).strip()),
                end="")
    

    打印

    Secret-file1.txt    - This file describes various secret activities of
                          organization Secret-Organization-1
    Secret-file2.txt    - This file describes various secret activities of
                          organization Secret-Organization-2. This summarizes
                          their activities from year 2001.
    Secret-file3.txt    - This file describes various secret activities of
                          organization Secret-Organization-3. This summarizes
                          their activities from year 2024.
    

    它不是 shell,但它会更快,因为您不会分叉一堆进程,并且您不会在 @987654321 时花费大量时间进行字符串格式化和编写循环来缩进文本@可以为你做。

    【讨论】:

      【解决方案3】:

      看看 Unix 中的fmt 命令。它可以以特定宽度重新格式化您的文档,甚至可以控制缩进。

      很久没用了。但是,它可以跟随缩进,设置宽度等。我感觉它可以做你想做的。

      另一个要查看的命令是prpr,默认情况下将文本分成页面,并添加页码,但您可以关闭所有这些。这是另一个命令,可以按照您想要的方式修改您的文本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-01
        • 2017-11-06
        • 1970-01-01
        • 2020-07-15
        • 2016-02-10
        • 1970-01-01
        • 2013-10-24
        • 2018-06-15
        相关资源
        最近更新 更多