打印输出到另一个文件夹

时间:2013-06-03 12:59:59

标签: bash awk

我想使用以下代码(Ref:-Perreal)来运行多个文件。我不想逐个打印输出,而是希望将每个文件的输出保存到另一个文件名为input的文件夹中。

任何帮助都将不胜感激!!

for i in folder1/*.txt;
do
awk '
BEGIN {
 path=sprintf("%s", "/home/chima/Desktop/folder2/")
}
!s[1":"$4":"$5]++{sU[$4]++;tot++}
!s[2":"$4":"$5]++{sU[$5]++;tot++} 
END {
for (x in sU)
print x, sU[x], sU[$1] > path FILENAME;
print "Total No -",tot > path FILENAME;
}'  $i;
done

错误: -

awk: cmd. line:9: (FILENAME=folder1/file1.txt FNR=955) fatal: can't redirect to `/home/chima/Desktop/folder2/folder1/file1.txt' (No such file or directory)

实际上,folder1和folder2在桌面上。

2 个答案:

答案 0 :(得分:1)

您可以在BEGIN部分中定义路径,并在打印语句后将其用作常规的awk变量。 FILENAME 是一个awk内置变量,用于存储正在处理的文件的名称。

for i in files/*.txt;
do
awk '
BEGIN {
    path=sprintf("%s", "/path/to/anotherfolder/")
}
!s[1":"$4":"$5]++{sU[$4]++;tot++} 
!s[2":"$4":"$5]++{sU[$5]++;tot++} 
END { 
    sub(/.*\//,"",FILENAME)
    for (x in sU) 
        print x, sU[x], sU[$1] > path FILENAME;
        print "Total No -",tot > path FILENAME;
}'  $i;
 done

答案 1 :(得分:0)

将您的print语句更改为:

print "Total No -",tot >"/home/user/anotherfolder/"FILENAME;