shell 在bash脚本中使用带数字的文件名循环通过目录

zd287kbt  于 2023-08-07  发布在  Shell
关注(0)|答案(4)|浏览(128)

我必须使用以下方案在包含文件的目录中执行循环:

P1_1.fq.gz,  P1_2.fq.gz
P2_1.fq.gz,  P2_2.fq.gz
...
P10_1.fq.gz,  P10_2.fq.gz

字符串
目的是一次只取“一行”。例如,在一次迭代中,我必须获取前两个文件并对它们进行操作。然后,再拿另外两个等等。我怎么能循环考虑这些数字呢?我想应该是这样的
第一个月
我有一些问题,我如何才能采取夫妇,而不是一个文件,并与语法有关的字母后,$i变量,因为我不是那么Maven与bash脚本。
接下来我可以尝试什么?

vqlkdk9b

vqlkdk9b1#

循环遍历_1文件并执行替换以获得_2文件:

for f1 in P*_1.gz; do
  f2=${f1/_1/_2}
  echo "$f1 --> $f2"
done

字符串
排序将是P10、P1、P2、…
如果你想让它们按“数字”顺序排列,你可以这样做:

printf '%s\n' P*_1.gz \
| sort -V \
| while read -r f1; do
    f2=${f1/_1/_2}
    echo "$f1 --> $f2"
  done

qco9c6ql

qco9c6ql2#

_1将以这种方式成为变量的一部分。解决方案是显式地告诉bash变量是什么:

for i in {1..10}; do
    echo '------------------'
    echo P${i}_1.fq.gz
    echo P${i}_2.fq.gz
done

字符串

n8ghc7c1

n8ghc7c13#

您可以尝试以下内容:

awk '{for(i=1;i<=10;i++) printf "P%g_1.fq.gz, P%g_2.fq.gz\n", i}'

字符串
awk循环
bash中的另一个选项

for (( i=1; i <= 10; i++ ))
do 
echo "P${i}_1.fq.gz, P${i}_2.fq.gz"
done

cgh8pdjw

cgh8pdjw4#

find . -name "P*_*.fq.gz" | xargs -n2 -d'\n' |
while read file1 file2; do   
  echo "processing $file1 and $file2"; 
done

processing ./P10_1.fq.gz and ./P10_2.fq.gz
processing ./P11_1.fq.gz and ./P11_2.fq.gz
processing ./P1_1.fq.gz and ./P1_2.fq.gz
processing ./P21_1.fq.gz and ./P21_2.fq.gz
processing ./P22_1.fq.gz and ./P22_2.fq.gz
processing ./P2_1.fq.gz and ./P2_2.fq.gz
processing ./P30_1.fq.gz and ./P30_2.fq.gz
processing ./P3_1.fq.gz and ./P3_2.fq.gz

字符串

相关问题