我正在尝试将 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
应该工作,或内联
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
将输出重定向移到循环之外。
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.
尝试这个
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
杰德沃兹,
如果您想要所有输出,则必须添加>>代替> 。否则你将只有循环的最后一次迭代。
for i in file/*.txt; do awk -f script.awk "$i" >> out; done