2013-06-03 2 views
1

Я хотел бы использовать следующий код (Ref: -Perreal) для запуска нескольких файлов. Вместо того, чтобы печатать выходы один за другим, я хочу сохранить выходы каждого файла в другую папку с именами файлов ввода.printng выходы в другую папку

Любая помощь будет оценена!

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 находятся на рабочем столе.

ответ

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 
+0

Я попробовал. Я получаю сообщение об ошибке awk: cmd. line: 9: (FILENAME = folder1/file1.txt FNR = 955) fatal: не может перенаправляться на '/home/chima/Desktop/folder2folder1/file1.txt '(нет такого файла или каталога) – user2447904

+0

Добавьте'/' в переменной пути. 'folder2folder1' в вашем сообщении об ошибке выглядит так, что отсутствует косая черта. –

+0

Я проверил его. передняя косая черта не пропущена. – user2447904

0

изменить ваше заявление для печати на:

print "Total No -",tot >"/home/user/anotherfolder/"FILENAME; 
Смежные вопросы