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; #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 回答
0

杰德沃兹,

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

for i in file/*.txt;  do awk -f script.awk "$i" >> out; done
于 2012-09-17T07:44:20.613 回答