Bash 如何将awk输出移动到单个文件夹?

Bash 如何将awk输出移动到单个文件夹?,bash,awk,Bash,Awk,我正在尝试将awk输出文件移动到单个文件夹中。每个输出文件的名称应为输入文件的名称。我使用了下面的程序。但该程序将每个输出文件保存为“out”,其目录名为输入文件的名称。如何更改以下代码以将输出保存到具有输入文件名的单个文件夹中 for i in file/*.txt; do mkdir "$i"_dir; awk -f script.awk "$i" > "$i"_dir/out; done 应该工作,还是内联 for i in file/*.txt; do awk -f scr

我正在尝试将awk输出文件移动到单个文件夹中。每个输出文件的名称应为输入文件的名称。我使用了下面的程序。但该程序将每个输出文件保存为“out”,其目录名为输入文件的名称。如何更改以下代码以将输出保存到具有输入文件名的单个文件夹中

for i in file/*.txt;  do mkdir "$i"_dir;  awk -f script.awk "$i" > "$i"_dir/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/ <-- The directory in which your .txt files reside ./foo/ <-- Your output folder 或者,如果您希望输出文件具有文件扩展名:

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

如果需要所有输出,则必须添加>以代替。否则,您将只进行循环的最后一次迭代

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

将输出重定向移到循环外部

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

文件/*.txt中i的
;做mkdir;awk-f script.awk“$i”>>dir/out;完成

您可以通过从
dir
更改为
anything
来更改所需的目录名


文件/*.txt中i的
;做任何事;awk-f script.awk“$i”>>任何内容/输出;完成

输出
将只包含最后一个文件的结果,因为每次迭代都将覆盖最后一个文件的结果。输出文件应调用什么?或者多个文件的输出应该在单个
out
文件中吗?输出文件应该是文件名的名称。在我的程序中,所有输出文件都命名为out而不是filename。
for i in file/*.txt;  do awk -f script.awk "$i" >> out; done
mkdir dir
for i in file/*.txt; do
  awk -f script.awk "$i"
done > dir/out
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.