2013-04-04 12 views
9

Chcę użyć awk i funkcji system(), aby przenieść kilka katalogów. Mam plik, który ma zostać przetworzony z nazwami awk file.cfg która jest zorganizowana w następujący sposób:wywołanie systemowe awk

/path1 /path2 
/some_path /some_other_path 
and so on.. 

każda pierwsza ścieżka jest oddzielona od drugiej ścieżki za pomocą spacji Więc oto jak to zrobiłem :

awk '{System (mv -R $ 1" „$ 2)}' file.cfg

ale to nie działa i mam

sh: 0/home/my_user/ścieżka1: Nie ma takiego pliku lub katalogu

Ale file.cfg wygląda następująco:

/home/my_user/ścieżka1/home/my_user/ścieżka2

i nie ma 0 przed/do domu. Więc czego tu brakuje?

+1

To bardzo zły pomysł. awk jest narzędziem do manipulowania tekstem, a nie do tworzenia/przenoszenia plików lub katalogów - do czego służy otoczka i procesowa manipulacja. Powiedz nam, co faktycznie próbujesz zrobić, a pomożemy ci zrobić to w rozsądny sposób. –

Odpowiedz

19

Musisz podać komendę dajesz do system:

awk '{system("mv -R " $1 " " $2)}' file.cfg 

Obecnie mv -R jest interpretowany jako wartość zmiennej mv minus wartość R, który jest 0 ponieważ nie jest zdefiniowana.

+0

Tak, to ma sens. Dzięki ! –

4

Dlaczego po prostu nie używać xargs?

cat file.cfg | xargs -n 2 mv 

Spowoduje to przekazanie tokenów (oddzielonych białymi znakami) z pliku do mv w grupach po dwa.

+0

ponieważ mam rozwiązać go z awk z jakiegoś powodu, nawet nie rozumiem .. –

+4

@axesdenied Ktokolwiek mówi ci, abyś użył awk w tym celu, nie wie o czym mówią. Przestań ich słuchać. Jeśli to nauczyciel, poproś o zwrot pieniędzy. –

+0

@EdMorton jest szczególny powód, że xargs jest lepszy w tym przypadku? Nie zaglądając w to zbyt wiele, podejrzewam, że metoda xargs wywołuje jeszcze jeden proces, niż tylko użycie awk. Nadal O (n), ale czy awk nie jest co najmniej pedantycznie lepszy? – bschlueter

Powiązane problemy