将子文件夹中多个文件中的行复制到一个文件中

时间:2016-01-21 02:20:42

标签: sed

我是非常非常非常新的编程,并试图学习如何更快地完成繁琐的分析任务。我有一个包含50个实验文件夹的主文件夹(Master),每个实验文件夹中都有另一组包含文本文件的文件夹。我想从其中一个文本fiels中提取2行(第7行的实验标题,第104行的斜率)并将它们复制到一个新的单个文件中。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以将findxargs结合使用。您可以单独获取所有相关文件的列表:

find . -name reco.txt -print

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

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

因此,您可以使用-exec代替xargs,而find Master -name reco.txt -print0 | xargs -0 -n1 sed -n '7p; 104 p' > results.txt 基本上是相同的,但具有更多控制权。

Master

执行以下操作:

  • 在目录reco.txt或子目录中搜索名为-print0的任何文件。
  • 使用null-terminator而不是newline(xargs)输出每个文件名 - 这允许完整路径包含通常需要转义的字符(例如空格)
  • 将结果输入-0,执行以下操作:
    • 接受以null结尾的字符串(-n1
    • 每个命令最多只能放入一个文件(sed -n '7p; 104 p'
    • 在该文件上运行results.txt
  • 整个输出被重定向到$wpdb->get_result('sql query');,这将覆盖文件中的任何现有内容。