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

时间:2012-09-17 06:12:14

标签: bash awk

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

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

4 个答案:

答案 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