2014-12-16 2 views
0

У меня есть несколько сотен файлов .txt, которые следуют определенному формату, например. 24 строки заголовка, затем x количество строк данных (количество строк зависит от каждого файла), за которым следует одна пустая строка. Единственная строка, которая мне интересна, - это нижняя строка данных. В частности, мне нужно нижнее значение второго столбца данных.Извлечение нижней строки из нескольких файлов .txt

Файлы не разделены табуляцией, но первый столбец после заголовка - «D» (два пробела после D).

До сих пор я пытался объединить все файлы и работать с конкатенированным файлом в блокноте ++, но не нашел способ маркировки нижней строки данных. Кроме того, мои попытки использования макросов выходят из строя в опции «найти».

Может ли кто-нибудь указать мне правильное направление?

Редактировать: к сожалению, мне мешает сделать это на моем рабочем ПК без разрешения на загрузку какой-либо IDE (а также с минимальной способностью). Моими инструментами являются Excel и Notepad ++!

+0

Использование Notepad ++, вероятно, неправильный способ пойти об этом. Это легко на многих языках программирования и сценариев. Еще проще было бы использовать программу Unix «хвост». – AdrianHHH

+0

Поскольку вы, вероятно, используете Windows, вы можете использовать PowerShell, я не уверен, как ваши файлы разделены, но что-то вроде этого, вероятно, сработает. 'dir * .txt | ForEach {Get-Content $ _ -Tail 1} | % {$ _. Split ('') [1]} ' – yate

ответ

0

Возможно, вы можете лучше использовать bash скрипт для этого:

#!/bin/bash 
for f in * #loop over files 
do 
    tail -n 2 "$f" | head -n 1 
done 

Программа, таким образом, печатает одну, но последняя строка каждого файла.

Вы можете запустить его с помощью:

bash script.sh 

И если вы хотите сохранить результат в файле, используйте перенаправление:

bash script.sh > outputfile 

Примечание: В сценарии * означает, соответствующий любому файлу. Если все файлы - это файлы .txt, вы можете использовать *.txt.

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

0

В другом редакторе SynWrite можно сделать это, используя скрипт Python (введите строки в консольной панели, Ctrl + тильда). Функция скрипта - ed_handles. Пример использования -

Here is example which prints all tabs contents: for h in ed_handles(): print('---'); print(Editor(h).get_text_all()); 
0

Как уже упоминалось в других ответов и комментариев, лучший способ будет использовать скрипт (оболочки или Perl, которые могут быть скопированы, как автономные, даже если у вас нет прав администратора на машине, или bash и Powershell, которые интегрированы в Windows по умолчанию).

Если вы действительно хотите использовать Notepad ++, возможно заменить файлы данными, это возможно.

Я использовал следующий пример:

############ 
## HEADER ## 
############ 
D 1 2 3 
D 4 5 6 
D 7 8 9 
D 0 a b 
(empty line) 

Следующая замена будет изменять файлы данных 2-го столбца

  • Search>Find in Files (Ctrl + Сдвиг + F)
  • Найти то, что: .*D .*D \S+\s+(\S+).*
  • Заменить:\1
  • Фильтры:*.txt
  • Каталог: Выберите каталог, в котором у вас есть файлы TXT (вы можете использовать Follow current doc. если один из файла в настоящее время открыта в Notepad ++)
  • Режим поиска установлен на Regular expression и . matches newline проверено

Это изменит файл

a 

Примечание: Пояснения регулярного выражения

  • .*D .*D соответствует всему тексту до последнего D (D с двойным пробел)
  • \S\s+ соответствует f рвые столбец данных и пространство после
  • (\ S +) соответствует второй колонке данных
  • .* соответствует остальной
Смежные вопросы