以下を含むファイル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をシェルとして使用していることを示します。次にカウンタをi
1に設定します。次に、glob
ファイルを変数に入れます。 file1を繰り返し、各行を変数に割り当てますr
。次に、各ファイルの11111
文字列をその行に表示されるものと一致させます。名前にカウンタを使用して新しいファイルに出力し、カウンタをインクリメントします。サイクルが完了するまで繰り返します。