입력 파일을 반복하지만 bash 스크립트의 그룹으로 처리합니다.

입력 파일을 반복하지만 bash 스크립트의 그룹으로 처리합니다.

예를 들어, 다음과 같은 이름의 파일이 여러 개 있습니다.

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

이 파일을 반복하고 싶지만 그룹으로 처리하여 Xhard.txt문자가 입력 파일 및 출력 파일로 사용됩니다.aXsoft.txtX.txtX등을 의미 합니다 a.bc실제로파일 이름에 문자 포함).

나는 시도했다:

#!/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)

관련 정보