for循环中的几行

时间:2015-09-04 11:36:56

标签: bash

我目前正在使用一个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个文件(前两个是相同的,但是在干净之前的最后1/2,下一个是相同的等等),对那些做一些事情二,然后采取接下来的两个。

2 个答案:

答案 0 :(得分: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

http://mywiki.wooledge.org/BashFAQ/001中解释了IFS= read -r line(正如@chepner所建议的那样)

您可以添加几个test -f来检查file1file2是否都存在。

答案 1 :(得分:-1)

请注意,for file in $folder不会迭代给定文件夹中的文件。

例如,如果folder=abc for循环将进行一次迭代,file等于abc,然后停止。

您必须以适合自己的方式自己提供文件列表,例如 bash

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