2012-12-23 65 views
0

我有一堆文件和一個腳本,我運行它們。該腳本需要兩個文件作爲輸入,所有文件都是這種格式:a.txt1 a.txt2獲取循環中的文件作爲腳本的輸入

現在我用的腳本是這樣的:foo.sh a.txt1 a.txt2

我有運行這個腳本運行在250對(例如a1.txt1 a1.txt2到a250.txt1 a250.txt2) 我通過輸入文件名手動執行此操作。我想知道是否有任何方法來自動化這個過程。所有這些對都在同一個文件夾中,是否有任何方法循環所有對上的過程?

我希望我說清楚。

謝謝。

具體而言,這些都是一些示例文件名:

  • T39_C.txt2
  • T39_D.txt1
  • T39_D.txt2
  • T40_A.txt1
  • T40_A.txt2
  • T40_B.txt1
  • T40_B.txt2
  • T40_C.txt1
  • T40_C.txt2
  • T40_D.txt1
  • T40_D.txt2
  • unmatched.txt1
  • unmatched.txt2
  • WT11_A.txt1
  • WT11_A.txt2
  • WT11_B .txt1
  • WT11_B.txt2
  • WT11_C.txt1

回答

2

假設所有文件都在對(即,<something>.txt1<something>.txt2那麼你可以做一些線這樣的:

1. #!/bin/bash 
2. 
3. for txt1 in *.txt1; do 
4. txt2="${txt1%1}2" 
5. # work on $txt1 and $txt2 
6. done 

在第3行中,我們使用shell水珠搶用.txt1結尾的所有文件。第4行,我們使用替代刪除最後的1並用2替換它。而真正的工作是在第5行

+0

喜, 謝謝你的答覆。我編輯了我的帖子。請根據文件名建議我。我是新來的Linux ..我希望你們不要介意它是否太簡單.. – PoisonAlien

+0

這是變得太通用或太具體,你有沒有一個通用的模式,你的文件必須遵守的一般性模式才能被處理? – fge

+0

沒有先生,但所有對都以.txt1和。txt2 – PoisonAlien

0

做#FOR在ls | sort | grep -v .txt2 每個文件在當前目錄中除了文件與.txt2 *
爲我做

 *#THE FIRST .txt1 file is $i* 
     first="$i" 

     *#THE SECOND IS THE SAME EXCEPT WITH .txt2 SO WE REPLACE THE STRING* 
     second=`echo "$i" | sed 's/.txt1/.txt2/g'` 

     #WE MAKE THE ASSUMPTION FOO.SH WILL ERROR OUT IF NOT PASSED TWO PARAMETERS 
     if !(bash foo.sh $first $second); then 
     { 
      echo "Problem running against $first $second" 
     } 
      else 
     { 
     echo "Ran against $first $second" 
     } 
     fi 
done 
相關問題