2016-01-21 146 views
1

我对编程非常非常非常新,并且试图学习如何使繁琐的分析任务更快一些。我有一个包含50个实验文件夹的主文件夹(主文件夹),每个实验文件夹内还有另一组包含文本文件的文件夹。我想从一个文本文件中提取两行(第7行的实验标题,第104行的斜率)并将它们复制到一个新的单个文件中。将子文件夹中多个文件的行复制到一个文件中

到目前为止,我所了解到的只是如何提取行并添加到新文件中。

sed -n'7p; 104 p'reco.txt >> results.txt

如何从文件夹'Master'的子文件夹中的所有文件'reco.txt'中提取这两行并导出到单个文本文件中?

尽可能多的解释能帮助我学习。

回答

0

您可以使用find结合xargs。就其本身而言,你可以得到所有相关文件的列表:

find . -name reco.txt -print 

这会在当前目录(.)或任何子目录名为reco.txt的所有文件,并将它们写入标准输出。

现在,通常您可以使用-exec参数find,它将为找到的每个文件运行一个程序,除了通常将多个结果组合为单个执行(附加到命令行)之外。您特定的sed调用一次只能在一个文件上运行。

因此,您可以使用xargs,而不是-exec,它本质上是一样的东西,但具有更多的控制权。

find Master -name reco.txt -print0 | xargs -0 -n1 sed -n '7p; 104 p' > results.txt 

这将执行以下操作:

  • 搜索目录Master或子目录名为reco.txt的任何文件。
  • 输出每个文件名与空终止而不是换行符(-print0) - 这允许完整路径包含通常需要转义(如空格)
  • 管道结果成xargs,其执行以下操作字符:
    • 接受空终止字符串(-0
    • 仅使至多一个文件分割成每一个命令(-n1
    • 奔跑sed -n '7p; 104 p'在该文件上
  • 整个输出被重定向到results.txt,它将覆盖文件中的所有现有内容。
+0

谢谢你的详细回复。很有帮助! – NER

相关问题