ファイルの各行を繰り返し、毎回新しいファイルを作成し、各行を使用して別のファイルの文字列を置き換える方法

ファイルの各行を繰り返し、毎回新しいファイルを作成し、各行を使用して別のファイルの文字列を置き換える方法

以下を含むファイル1があります。

AAAAAA
BBBBBB

以下を含むファイル2があります。

11111 22222 33333

ファイル 3 には以下が含まれます。

22222 11111 33333

ファイル1の各行をファイル2と3に挿入して「11111」を置き換え、毎回新しいファイルを作成したいと思います。したがって、最終結果は4つのファイルです。

ファイル1:

AAAAAA2222233333

ファイル2:

BBBBBB2222233333

ファイル3:

22222AAAAAA33333

ファイル4:

22222BBBBBB33333

値を置き換えるために入れ子になったforループとsedを試しましたが、現在は機能しません。 (ディレクトリ/ *にはファイル2とファイル3が含まれています。)

FILES=/directory/*
cat file1 | while read line ;do
    for f in $FILES; do

            cat $f | sed 's/11111/$i/g' > newfiles/$f$i.txt

    done

done

スクリプトを実行するたびに編集するファイルの数が異なる可能性があるため、ディレクトリを繰り返してすべてのファイルが含まれていることを確認したいと思います。ファイル1にも異なる数の文字列があります。

ベストアンサー1

代替ファイルを繰り返してから、ターゲットファイルを繰り返す必要があります。ほぼ全部来たと思います。次のようなものがあります(ワイルドカードが機能するようにいくつかのファイル名を変更しました)。

!/bin/bash

i=1
FILES=./other_file*
while read r; do
    for f in $FILES; do
        sed "s/11111/$r/g" > newfiles/file$i.txt < $f
        i=$(( i + 1 ))
    done
done <file1

ここでは、まずbashをシェルとして使用していることを示します。次にカウンタをi1に設定します。次に、globファイルを変数に入れます。 file1を繰り返し、各行を変数に割り当てますr。次に、各ファイルの11111文字列をその行に表示されるものと一致させます。名前にカウンタを使用して新しいファイルに出力し、カウンタをインクリメントします。サイクルが完了するまで繰り返します。

おすすめ記事