2013-07-04 5 views
0

У меня есть каталог (конфиденциальный), который содержит кучу текстовых файлов.файл форматирования с использованием bash

Конфиденциального

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

Хочу производство другого текстового файла (Summary.txt) с TextWidth, скажем, 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).

Благодаря

+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

Посмотрите на команду fmt в Unix. Он может переформатировать ваш документ с определенной шириной и даже отступом управления.

Прошло много времени с тех пор, как я использовал его. Тем не менее, он может следовать за отступами, устанавливать ширину и т. Д. У меня такое чувство, что оно может делать то, что вы хотите.

Другая команда, которую нужно посмотреть, - pr. pr, по умолчанию разбивает текст на страницы и добавляет номера страниц, но вы можете перевернуть все это. Это еще одна команда, которая может обрабатывать ваш текст так, как вы хотите.

Смежные вопросы