forループを使用してtmpファイルのデータを最終出力ファイルに1つずつ書き込む方法は?

forループを使用してtmpファイルのデータを最終出力ファイルに1つずつ書き込む方法は?

tmp1いくつかの行を含むtmpという2つのファイルがありますtmp2
tmp1 ファイル、

1c\  
datafile no. 23  
2c\  
datafile is ok

tmp2ファイル、

3c\  
datafile no. 24  
4c\  
datafile is ok

ファイル(名前wrong_file)があり、tmpファイルでそのファイルのエントリを変更したいと思います。

datafile no. 32  
datafile is ok  
datafile no. 42  
datafile is ok

私の出力ファイル(modified_file)は次のようになります。

datafile no. 23  
datafile is ok  
datafile no. 24  
datafile is ok    

手動で実行する代わりに、最後のtmpファイルとして実行し、tmpファイルのデータを最終ファイル(出力)に書き込むforループを使用したいと思います。

頑張りましたが、

sed -f tmp1 wrong_file > file1  
sed -f tmp2 file1 > modified_file

答え1

私はあなたがこれを行うことができると確信しています:

cat ./tmp[12] | sed -f - ./wrong_file >outfile

sed少なくともすべてのスクリプト指示が行番号にのみ適用される場合、問題は発生しません。スクリプトを個別に適用する必要はありません。すべて一緒に接続し、スクリプトをすぐに実行できます。

しかし、これを行う必要がありますが、これは努力が重複するという意味です。ここsed一時ファイルを最初に作成せずに、代わりに入力から変更する必要がある行を検索してから、ストリームのすべての内容を一度sedに最終スクリプトに渡すスクリプトのコピーです。

{   sed '/^#\.tid\.setnr/!d;=;g;G' |
    paste  -d'c\\\n' - - - ./addfile
}   <./mainfile | sed -f - ./mainfile

出力は以下に基づいているため、ここのサンプルデータとは異なります。その他の問題。ただし、修正スクリプトの完全な作成を防ぎ、すべての編集コマンドをsedすぐに実行できるプロセスに送信します。

sed通常、プロセスは編集入力も処理する準備ができているため、スクリプト入力も処理する準備ができていると考えることができます。 -

関連情報