我想使用以下代码(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在桌面上。
答案 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;