2

フォルダ内に気象情報がコード化された数千のファイルがあります。すべてのファイルに、制御文字を含むヘッダーとフッターを追加する必要があります。ヘッダーとフッターが別々のファイルにあるので、これは問題ではありません(catbashスクリプトのコマンドで達成されます)。

ただし、変更されたファイルは元の名前を保持する必要があります。これは、非常に基本的なスクリプトの知識しかないため、問題が発生します。それらを保持する理由は、これらのファイルが解析およびデコードされるためです。ファイル名には、デコーダーがコンテンツを処理する方法に関する重要な情報が含まれています。

デコードされるすべてのファイルは、別のファイルにありlist_of_files_to_decode.txtます。

フォルダの内容の一部は次のようになります。

a_snvs02wiix170600_c_eswi_20121117062131_76.txt
a_smci40babj170600_c_kwbc_20121117061545_3.txt
a_sath40vtbb170600_c_ekmi_20121117061604_95.txt
a_usxx40mynn70600cca_c_edzw_20121117062020_34.txt
a_siin40dems170600_c_ojam_20121117062020_40.txt
a_smxx40fapr170600rra_c_lowm_20121117062604_67.txt    
list_of_files_to_decode.txt   
start-seq.txt    
stop-seq.txt  

私はWebをチェックし、自分のアイデアのいくつかをテストしました-とを使用awkしてsed-しかし、これを簡単な方法で達成するための適切な方法を実際に見つけることはできません。だから、私はどのように進めるかについてのいくつかの助けやヒントをいただければ幸いです。

4

3 に答える 3

3
while IFS= read -r file; do
    cat header.txt "$file" footer.txt > newfile && mv newfile "$file"
done < list_of_files_to_decode.txt

説明

  • 連結とシェルリダイレクトを使用するだけです
  • &&はショートカットです。これはif condition; then action; fi
于 2012-11-17T14:40:23.170 に答える
0

唯一の安全な方法は、最初に元のファイルの名前を変更することです

mv $file $file.orig
cat header $file.orig footer > $file && rm $file.orig

またはその逆に、新しいファイルを作成してから、元のファイルを上書きします

cat header $file footer > $file.new && mv -f $file.new $file
于 2012-11-17T14:41:33.543 に答える
0

ループのない方法sed:

OLDIFS=$IFS; IFS=$'\n'
sed -i '1 r header.txt
        1 N
        $ r footer.txt' $(<list_of_files_to_decode.txt)
IFS=$OLDIFS


ノート:

  • IFSファイル名にスペースが含まれている場合にのみ、改行に設定します
  • r次の行の読み取り時にファイルの内容を出力します
  • 1 Nのコンテンツの前に最初の行が印刷されるのを防ぎますheader.txt

    (詳細: 2 行目を読み取り、パターン スペースに追加rし、 の内容を出力するようにトリガーしますheader.txt。その後、1 行目と 2 行目で構成されるパターン スペースは、サイクルの最後にのみ出力されます)

  • もちろん、IFSスクリプトを使用している場合は、バックアップとリセットは必要ないかもしれません。
于 2012-11-17T17:38:22.330 に答える