2013-07-04 23 views
0

我有一个目录(机密),其中包含一堆文本文件。使用bash格式化文件

保密

:- 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-preferred-bash-built-in)。

感谢

一个

+4

对不起,潜在的解决方案是*秘密*。 – devnull

+0

它看起来像你需要提取每个文件('head'或'sed')的第一行,然后格式化准备压缩('fmt'?它不清楚是否有标准的文字包装器) ,然后安排处理每个格式化的输出,所以第一行前面是文件名和破折号,其余的是相应数量的空格。 –

回答

1

这是来到了我的心,因为你没有写你尝试过什么,我要离开可能调整,以你最简单的事,但我相信这是一个很好的启动;)

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

您可以使用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. 

这不是外壳,但它会更快,因为你不分叉一堆的流程,你不会花大量的时间与字符串格式化并写入循环,以缩小文本时the textwrap module可以为你做。

0

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

自从我使用它已经很久了。但是,它可以遵循缩进,设置宽度等。我有一种感觉,它可以做你想做的。另一个命令是prpr,默认情况下会将文本分成多个页面,并添加页码,但您可以关闭所有这些页面。这是另一个命令,可以按照自己的方式将文本写入。