入力ファイルを繰り返しますが、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)

関連情報