0

awk 出力ファイルを単一のフォルダーに移動しようとしています。各出力ファイルの名前は、入力ファイルの名前にする必要があります。以下のプログラムを使用しました。ただし、このプログラムは各出力ファイルを「out」として保存し、そのディレクトリ名は入力ファイルの名前です。次のコードを変更して、出力を入力ファイル名を持つ単一のフォルダーに保存するにはどうすればよいですか。

for i in file/*.txt;  do mkdir "$i"_dir;  awk -f script.awk "$i" > "$i"_dir/out; done
4

4 に答える 4

1
for i in file/*.txt;  do 
    awk -f script.awk "$i" > out; 
done

動作するか、インライン

for i in file/*.txt;  do awk -f script.awk "$i" > out; done

出力ファイルは、現在のディレクトリで単に「out」という名前になります。

また、これはディレクトリを作成せず、出力をディレクトリに保存しないことにも注意してください。mkdirディレクトリを作成する必要があるが、それらに書き込む必要がない場合は、コマンドを追加し直す必要があります。

編集

更新された質問ごとに、最初に出力ディレクトリを作成し、それを呼び出しますfoo

mkdir foo

これで、ディレクトリ構造は次のようになります。

/ path / to / your / base-folder /
                        ./file/<-.txtファイルが存在するディレクトリ
                        ./foo/<-出力フォルダー

次に、そのベースフォルダー内から次のコマンドを実行できます。

for i in file/*.txt;  do awk -f script.awk "$i" > foo/"$i"; done

または、出力ファイルにファイル拡張子が必要な場合:

for i in file/*.txt;  do awk -f script.awk "$i" > foo/"$i".txt; done
于 2012-09-17T06:15:35.237 に答える
0

出力リダイレクトをループの外に移動します。

mkdir dir
for i in file/*.txt; do
  awk -f script.awk "$i"
done > dir/out
于 2012-09-17T13:06:54.133 に答える
0

ジェドワーズ、

すべての出力が必要な場合は、 >の代わりに>>を追加する必要があります。それ以外の場合は、サイクルの最後の反復があります。

for i in file/*.txt;  do awk -f script.awk "$i" >> out; done
于 2012-09-17T07:44:20.613 に答える
0
for i in file/*.txt; #get a value for "i"
 do mkdir "$i"_dir; #create a folder called *value for i"_dir
 awk -f script.awk "$i" > "$i"_dir/out; done #save the output to the created
                                             #directory saving only the last
                                             #iteration of the cycle, as @farid said.

これを試して

for i in file/*.txt; do mkdir dir; awk -f script.awk "$i" >> dir/out; done

dir、から変更することで、目的のディレクトリ名を変更できますanything

for i in file/*.txt; do mkdir anything; awk -f script.awk "$i" >> anything/out; done

于 2012-09-17T13:37:02.270 に答える