我目前正在使用一个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,下一个是相同的等等),对那些做一些事情二,然后采取接下来的两个。
答案 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
来检查file1
和file2
是否都存在。
答案 1 :(得分:-1)
请注意,for file in $folder
不会迭代给定文件夹中的文件。
例如,如果folder=abc
, for循环将进行一次迭代,file
等于abc
,然后停止。
您必须以适合自己的方式自己提供文件列表,例如 bash :
for file in $(find $folder -maxdepth 0 -type f); do...