1

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

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

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 在桌面上。

4

2 回答 2

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
于 2013-06-03T13:13:22.873 回答
0

将您的打印语句更改为:

print "Total No -",tot >"/home/user/anotherfolder/"FILENAME;
于 2013-06-03T13:04:12.177 回答