2015-09-04 76 views
-1

我目前正在使用一個bash文件,該文件必須從我們所在的文件夾中取出,每次兩個文件(這些文件是相同的但是是一個數字),然後執行某些操作其他兩個等等。for循環中的幾行

我想過用做它的循環:

for file in $folder; do 
    sort #this will leave them together 
    if $file = "*1*"; then 
     take the next one also 

這是我能來最好的,但我相信,必須有,我沒有看到另一種方式。

感謝

編輯:

的文件是這樣的:

xxxxxxxxxxxxxxxxxx_L1_XXXXXXXXXXXXXXXXXX-39_1.clean.fq.gz 
xxxxxxxxxxxxxxxxxx_L1_XXXXXXXXXXXXXXXXXX-39_2.clean.fq.gz 
xxxxxxxxxxxxxxxxxx_L2_XXXXXXXXXXXXXXXXXX-39_1.clean.fq.gz 
xxxxxxxxxxxxxxxxxx_L2_XXXXXXXXXXXXXXXXXX-39_2.clean.fq.gz 
xxxxxxxxxxxxxxxxxx_L3_XXXXXXXXXXXXXXXXXX-39_1.clean.fq.gz 
xxxxxxxxxxxxxxxxxx_L3_XXXXXXXXXXXXXXXXXX-39_2.clean.fq.gz 

這樣的想法是做一個bash腳本,將需要2個文件在同一時間(第2相同但在乾淨之前的最後一個1/2,下一個是相同的,等等),對這兩個做一些事情,然後再拿下兩個。

+0

這是很不清楚你問。你能舉出一些這些文件的例子,並且更詳細地描述你想要用它們做什麼以及你無法做到的方式?一些*實際*代碼也會很好。 – Biffen

+0

剛剛用文件編輯:) – MLMH

回答

-1

請注意,for file in $folder不會遍歷給定文件夾中的文件。

例如,如果folder=abc,該for循環會去一次迭代與file等於abc,然後停止。

你必須自己提供的文件列表中,適合你,比如方式,在慶典

for file in $(find $folder -maxdepth 0 -type f); do... 
+1

[不要使用'for'遍歷文件列表。](http://mywiki.wooledge.org/BashFAQ/001)。 – chepner

+2

這也沒有解決如何按照要求遍歷*對*類似的文件名。 – chepner

1

什麼:

find "$folder" -name '*_1.clean.fq.gz' | while IFS= read -r line ; do 
    common_prefix=`printf $line | sed -e 's/_1.clean.fq.gz$//'` 
    file1=${common_prefix}_1.clean.fq.gz 
    file2=${common_prefix}_2.clean.fq.gz 
done 

IFS= read -r linehttp://mywiki.wooledge.org/BashFAQ/001解釋(如@chepner所示)

您可以添加一對test -f檢查是否存在file1file2

+0

這工作就像一個魅力! – MLMH

+0

雖然我有一個問題。我還必須刪除firts集「x」。我想用第二個sed來做,但顯然不行。 – MLMH

+0

'printf「xxxxxxxxxxxxxxxxxx_L1_XXXXXXXXXXXXXXXXXX」| sed -e's/^ [^ _] * //''? –