2016-01-21 141 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

相關問題