入力ファイルを処理するときのコピー/更新と名前変更は効率的なアプローチですか?

入力ファイルを処理するときのコピー/更新と名前変更は効率的なアプローチですか?

2つのファイルを入力として使用するスクリプトがあります。
処理を開始するには、まずファイルの準備が必要です。
私の考えは、元のファイルに触れることなくすべてをコピーし、出力として必要なものを印刷し、コピーを削除することです。
ただし、このアプローチを使用すると、スクリプトに変数が多くなり、エラーが発生しやすくなります。
例:

#!/bin/bash                                                                                                      
[[ -z $1 ]] && echo 'We need input file a' && exit 1;  
[[ -z $2 ]] && echo 'We need input file b' && exit 1;  

A_CSV=$1;  
B_CSV=$2;  

A_FILE="$A_CSV.tmp";  
B_FILE="$B_CSV.tmp";  

[ -f $A_FILE ]] && rm $A_FILE;  
[[ -f $B_FILE ]] && rm $B_FILE;  

tr -d "\r" < $A_CSV >  $A_FILE;  
tr -d "\r" < $B_CSV > $B_FILE;  

awk '{ if(NR == 1) sub(/^\xef\xbb\xbf/,""); print }' $A_FILE > "$A_FILE.bck";
awk '{ if(NR == 1) sub(/^\xef\xbb\xbf/,""); print }' $B_FILE > "$B_FILE.bck";

rm $A_FILE && mv "$A_FILE.bck" $A_FILE;   
rm $B_FILE && mv "$B_FILE.bck" $B_FILE;   
# extra logic following the same pattern  

更新を続けて名前を変更するためにコピーがどのように作成されるかを確認できます。

スクリプトエラーを減らすためにこれを改善する方法はありますか?

ベストアンサー1

これは|パイプ()によって達成されます。世界には良いチュートリアルがたくさんあります。 これ

#!/bin/bash
[[ -z $1 ]] && echo 'We need input file a' && exit 1;
[[ -z $2 ]] && echo 'We need input file b' && exit 1;  

A_CSV=$1;  
B_CSV=$2;  

A_FILE="$A_CSV.tmp";  
B_FILE="$B_CSV.tmp";  

[ -f $A_FILE ]] && rm $A_FILE;
[[ -f $B_FILE ]] && rm $B_FILE;

tr -d "\r" < $A_CSV | awk '{ if(NR == 1) sub(/^\xef\xbb\xbf/,""); print }' > $A_FILE
tr -d "\r" < $B_CSV | awk '{ if(NR == 1) sub(/^\xef\xbb\xbf/,""); print }' > $B_FILE

個人的に、私は両方のファイルに対して同じことをするので、単一のタスクを処理する関数を作成したいと思います。 rm -f $A_FILE $B_FILE私の考えは見るのにもっと良いと思います。

おすすめ記事