ファイル名パターン「_base.txt」に一致するファイルの内容を大文字に変更し、元のファイル名と「_cap.txt」を一緒に使用して結果を別のフォルダに出力します。
3,000個のファイルでこれを行う予定です。だから今、いくつかのファイルをテストしています。
まず、内容を資本化できました。ただし、出力結果はリダイレクトされません。
BASE="/home/dir/input/"
find "$BASE" -type f -iname "*.txt" -exec awk '{print toupper($0)}' {} +
その後、以下を追加して、「_cap.txt」で終わる新しいファイル名で出力することができました。
BASE="/home/dir/input/"
find "$BASE" -type f -iname "*_pv_bind_basefile.txt" -exec awk '{print toupper($0) >> (FILENAME "_cap.txt")}' {} +
特定のフォルダに出力しようとすると問題が発生します
BASE="/home/dir/input/"
OUT_FOLDER="/home/dir/output/"
find "$BASE" -type f -iname "*_pv_bind_basefile.txt" -exec awk '{print toupper($0) >> ($OUT_FOLDER FILENAME "_cap.txt")}' {} +
次のエラーメッセージが表示されます。
awk: 無効なフィールド $()、名前 "OUT_FOLDER" 入力レコード番号 1、ファイル /home/dir/input/TAB1.a1.001.txt ソース行番号 1
ファイルを出力するために何度も繰り返しようとしましたが、数時間後に悲惨に失敗しました...私が見落としているかどうかわからない簡単なことです。どんなアドバイスも本当にありがとうございます。ありがとうございます。
答え1
シェル変数とAwk変数は異なります。
変数を環境にエクスポートすると、ENVIRON
awkの配列を介してアクセスできるため、これを行うことができます(注:find
質問の中核ではないため省略しました)
export OUT_FOLDER="/home/dir/output/"
awk '{print toupper($0) >> ENVIRON["OUT_FOLDER"] FILENAME "_cap.txt"}'
-v
あるいは、オプションを使用して変数を渡すこともできます。
OUT_FOLDER="/home/dir/output/"
awk -v out_folder="$OUT_FOLDER" '{print toupper($0) >> out_folder FILENAME "_cap.txt"}'