我正在尝试将awk输出文件移动到单个文件夹中。每个输出文件的名称应该是输入文件的名称。我使用了以下程序。但是此程序将每个输出文件保存为“out”,其目录名称是输入文件的名称。如何更改以下代码以将输出保存到具有输入文件名的单个文件夹中。
for i in file/*.txt; do mkdir "$i"_dir; awk -f script.awk "$i" > "$i"_dir/out; done
答案 0 :(得分: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/ <-- 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"; done
或者如果您想在输出文件上添加文件扩展名:
for i in file/*.txt; do awk -f script.awk "$i" > foo/"$i".txt; done
答案 1 :(得分:0)
jedwards,
如果您想要所有输出,则必须添加&gt;&gt; 代替&gt; 。否则你将只有循环的最后一次迭代。
for i in file/*.txt; do awk -f script.awk "$i" >> out; done
答案 2 :(得分:0)
将输出重定向移到循环外部。
mkdir dir
for i in file/*.txt; do
awk -f script.awk "$i"
done > dir/out
答案 3 :(得分: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