2013-04-04 44 views
9

Tôi muốn sử dụng awk và chức năng system() để di chuyển một vài thư mục xung quanh. Tôi có một tập tin mà tôi muốn để xử lý với tên awk file.cfg được tổ chức theo cách sau:hệ thống awk gọi

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

mỗi con đường đầu tiên được tách ra khỏi con đường thứ hai bởi một khoảng trắng Vì vậy, dưới đây là cách tôi đã làm nó :

awk '{hệ thống (mv -R $ 1" "$ 2)}' file.cfg

nhưng nó không hoạt động và tôi nhận được

sh: 0/home/my_user/path1: Không có tập tin hoặc thư mục

Nhưng file.cfg đó trông như thế này:

/home/my_user/path1/home/my_user/path2

và không có 0 trước/home. Vậy tôi đang thiếu gì ở đây?

+1

Đó là một ý tưởng rất tồi. awk là một công cụ để thao tác văn bản, không phải để tạo/di chuyển các tập tin hoặc thư mục - đó và xử lý thao tác là những gì một trình bao. Hãy cho chúng tôi biết bạn đang thực sự cố gắng làm gì và chúng tôi có thể giúp bạn làm điều đó một cách hợp lý. –

Trả lời

19

Bạn cần phải trích dẫn lệnh bạn cung cấp cho system:

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

Hiện nay mv -R được hiểu là giá trị của mv biến trừ đi giá trị của R, đó là 0 vì không được định nghĩa.

+0

Điều đó có ý nghĩa. Cảm ơn ! –

4

Tại sao không chỉ sử dụng xarg?

cat file.cfg | xargs -n 2 mv 

Điều này sẽ chuyển mã thông báo (cách nhau bởi khoảng trống) từ tệp của bạn vào mv theo nhóm hai người.

+0

bởi vì tôi phải giải quyết nó với awk vì lý do nào đó thậm chí tôi không hiểu .. –

+4

@axesdenied Bất cứ ai nói với bạn để sử dụng awk cho điều này không biết những gì họ đang nói về. Đừng nghe họ nữa. Nếu đó là giáo viên, hãy yêu cầu trả lại tiền của bạn. –

+0

@EdMorton là có một lý do cụ thể mà xargs là tốt hơn trong trường hợp này? Nếu không nhìn vào nó quá nhiều, tôi nghi ngờ rằng phương pháp xargs gọi thêm một quá trình hơn là chỉ sử dụng awk. Vẫn còn O (n), nhưng là awk không ít nhất về mặt giáo dục tốt hơn? – bschlueter

Các vấn đề liên quan