提取多个.txt文件的底线

时间:2014-12-16 15:34:49

标签: notepad++

我有几百个.txt文件,它们遵循特定的格式,例如。 24行标题文本然后x行数据行(行数随每个文件而变化),后跟一个空行。我感兴趣的唯一一行是最底层的数据。更具体地说,我需要第二列数据的底值。

文件不是制表符分隔的,但标题后的第一列是" D" (D之后的两个空格)。

到目前为止,我尝试连接所有文件并使用notepad ++中的连接文件,但还没有找到标记最下面一行数据的方法。此外,我尝试使用宏失败的'发现'选项。

有人能指出我正确的方向吗?

编辑:不幸的是,我在我的工作PC上这样做是有阻碍的,没有授权下载任何类型的IDE(以及几乎没有能力)。我唯一的工具是Excel和记事本++!

3 个答案:

答案 0 :(得分: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

     

注意:您应该在文件所在的目录中运行脚本。

答案 1 :(得分: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());

答案 2 :(得分:0)

正如其他答案和评论中所提到的,最好的方法是使用脚本( shell Perl ,即使您没有,也可以单独复制)计算机上的管理员权限,或默认情况下集成在Windows中的 bash Powershell 。)

如果你真的想使用Notepad ++,可以用数据替换文件,这是可能的。

我使用了以下示例:

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

以下替换将文件更改为第二列的数据

  • Search> Find in Files Ctrl + Shift + F
  • 查找内容.*D .*D \S+\s+(\S+).*
  • 替换为: \1
  • 过滤器: *.txt
  • 目录:选择您拥有txt文件的目录(如果其中一个文件当前在Notepad ++中打开,则可以使用Follow current doc.
  • 搜索模式设置为Regular expression. matches newline已选中

这会将文件更改为

a
  

注意:正则表达式的解释

     
      
  • .*D .*D对应所有文字,直到最后D(D为双倍空格)
  •   
  • \S\s+对应于第一列数据及其后的空格
  •   
  • (\ S +)对应于第二列数据
  •   
  • .*对应其余
  •