迭代输入文件,但在 bash 脚本中分组处理它们

迭代输入文件,但在 bash 脚本中分组处理它们

例如,我有多个带有名称的文件

ahard.txt
asoft.txt
bhard.txt
bsoft.txt
chard.txt
csoft.txt

我想循环这些文件,但分组处理它们,以便Xhard.txt和用作输入文件和输出文件,其中字母aXsoft.txtX.txtX代表abc(它是实际上文件名中的一个字母)。

我努力了:

#!/bin/bash

i=$(ls *.txt)

for x in $i
do
    pipeline nser=2 input1="${x/soft.txt}" input2="${x/hard.txt}" outfile="${x/hard.txt}"
done

答案1

您可以使用参数扩展来提取文件名的第一个字符:

#! /bin/bash
for soft in ?soft.txt ; do
    letter=${soft:0:1}
    hard=${letter}hard.txt
    if [[ ! -f $hard ]] ; then
        echo "$hard not found" >&2
        continue
    fi
    echo "$soft $hard $letter.txt"
done
  • ${soft:0:1}$soft返回(位置 0,长度 1)的第一个字符。

请注意,它不会报告缺少 Xsoft 的 Xhard。

顺便说一句,使用的$(ls ...)几乎总是错的。如上面的代码片段所示迭代扩展的 glob,或者直接填充数组而不使用ls

files=(*.txt)

相关内容