runawk là một wrapper nhỏ cho thông dịch viên AWK rằng impements hệ thống mô-đun và giúp để viết các chương trình AWK độc.
ĐỘNG LỰC
Sau nhiều năm sử dụng AWK cho chương trình tôi đã tìm thấy rằng, mặc dù
đơn giản và hạn chế của nó AWK là đủ tốt cho kịch bản rộng
loạt các nhiệm vụ khác nhau. AWK là không như poweful như họ lớn hơn
các đối tác như Perl, Ruby, TCL và những người khác nhưng nó có riêng của họ
những ưu điểm như nhỏ gọn, đơn giản và sẵn có trên hầu như tất cả
Hệ thống UNIX-like. Cá nhân tôi cũng thích bản chất hướng dữ liệu của nó và
định hướng token, kỹ thuật rất hữu ích cho việc xử lý văn bản đơn giản
tiện ích.
Nhưng! Thật không may awk dịch viên này thiếu một số tính năng quan trọng và
đôi khi làm việc không tốt như nó whould được.
Một số vấn đề tôi thấy (một số trong số họ, tất nhiên).
1) AWK thiếu hỗ trợ cho các mô-đun. Ngay cả nếu tôi tạo ra các chương trình nhỏ, tôi
thường muốn sử dụng chức năng tạo ra trước đó và đã được sử dụng trong
các kịch bản khác. Đó là, nó whould tuyệt vời để orginise chức năng vào
nên gọi là thư viện (module).
2) Để truyền tham số #! / Usr / bin / awk -f kịch bản (không awk
thông dịch viên), nó là cần thiết để prepand một danh sách các
tranh cãi với - (hai trừ đi Signes). Theo quan điểm của tôi, điều này có vẻ nặng.
Ví dụ:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; BEGIN {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; for (i = 1; i
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
Shell phiên:
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; / Usr / bin / AWK: chưa biết lựa chọn --opt1 bỏ qua
& Nbsp; & nbsp; & nbsp; / Usr / bin / AWK: chưa biết lựa chọn --opt2 bỏ qua
& Nbsp; & nbsp; & nbsp; % Awk_program - --opt2 --opt1
& Nbsp; & nbsp; & nbsp; Argv [1] = - opt1
& Nbsp; & nbsp; & nbsp; Argv [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
Trong quan điểm của tôi awk_program kịch bản nên làm việc như thế này (giống như
chương trình bình thường làm)
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; Argv [1] = - opt1
& Nbsp; & nbsp; & nbsp; Argv [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
Có thể sử dụng runawk.
3) Khi #! / Usr / bin / awk -f kịch bản xử lý các đối số (tùy chọn) và muốn
đọc từ stdin, nó là cần thiết để thêm
/ Dev / stdin (hay '-') như là một đối số cuối cùng explicitely.
Ví dụ:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; BEGIN {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; if (argv [1] == "--flag") {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; flag = 1
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Argv [1] = "" # để không đọc tập tin có tên "--flag"
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print "flag =" cờ "$ 0 =" 0 $
& Nbsp; & nbsp; & nbsp; }
Shell phiên:
& Nbsp; & nbsp; & nbsp; % Vang thí nghiệm | awk_program - --flag
& Nbsp; & nbsp; & nbsp; % Vang thí nghiệm | awk_program - --flag / dev / stdin
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = test
& Nbsp; & nbsp; & nbsp; %
Lý tưởng nhất awk_program nên làm việc như thế này
& Nbsp; & nbsp; & nbsp; % Kiểm tra tiếng vang | awk_program --flag
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = test
& Nbsp; & nbsp; & nbsp; %
Tất cả các probles được giải quyết bằng cách runawk và đây là lý do tại sao tôi đã viết nó.
Tôi cũng có một vài mô-đun để runawk phân phối đó là
hữu ích cho tôi và tôi hy vọng sẽ có ích cho bạn quá.
LẮP
0) BSD make là bắt buộc. Tôi đặt tên nó chỉ 'làm' nhưng tên thật của nó có thể
& Nbsp; & nbsp; khác nhau. & nbsp; bmake và pmake là những cái tên có thể.
& Nbsp; & nbsp; Nếu bạn cần thay đổi các tùy chọn mặc định xây dựng,
& Nbsp; & nbsp; chạy làm như thế này
& Nbsp; & nbsp; & nbsp; & nbsp; env [YOUR_ASSIGNMENTS] làm
& Nbsp; & nbsp; Xem ví dụ bên dưới
1) Giải nén tarball bạn đã tải về như thế này
& Nbsp; & nbsp; gzip -dc runawk-X-Y-Z.tar.gz | tar -xf-
2) cd runawk-X-Y-Z
3) thực hiện
4) (tùy chọn!) Thực hiện cài đặt-dirs
5) thực hiện cài đặt
Có rất nhiều biến Makefile có thể được thay đổi trong quá
. cài đặt & nbsp; Biến riêng của Runawk (Tất cả họ là vào đầu
Makefile):
& Nbsp; PREFIX & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Nơi runawk được cài đặt để
& Nbsp; MODULESDIR & nbsp; & nbsp; & nbsp; & nbsp; - Thư mục modules được cài đặt để
& Nbsp; AWK_PROG & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Đường dẫn đến thông dịch awk
& Nbsp; STDIN_FILENAME - đường dẫn đến tập tin thiết bị stdin
Biến BSD make của (thường được sử dụng nhất,
cho tất cả những người khác - xem tài liệu hướng dẫn thực hiện của các tập tin và .mk)
& Nbsp; BINDIR - nơi runawk thi chính nó được cài đặt để
& Nbsp; Mandir - nơi trang hướng dẫn được cài đặt để
& Nbsp; BINOWN - runawk chủ sở hữu thực thi
& Nbsp; BINGRP - runawk nhóm thực thi
& Nbsp; MANOWN - người đàn ông chủ sở hữu trang
& Nbsp; MANGRP - người đàn ông nhóm trang
Ví dụ:
& Nbsp; & nbsp; env CC = gcc
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; PREFIX = / home / cheusov / địa phương
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDFLAGS = '- L / usr / pkg / lib -Wl, -rpath -Wl, / usr / pkg / lib'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDADD = -lextralib
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CFLAGS = '- Werror Wall'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CPPFLAGS = -I / usr / pkg / bao gồm
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINGRP = người dùng
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANGRP = người dùng
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MKCATPAGES = không
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; làm cho tất cả các cài đặt -s-dirs cài đặt
là gì mới trong phiên bản này:
- Các tùy chọn -i, -I, và tất cả các tùy chọn dài đã được loại bỏ hoàn toàn.
- Các tùy chọn -T đã được bổ sung cho đầu vào tab.
- Các tùy chọn -v là tài liệu trong trang người đàn ông.
- Sửa chữa cho các cảnh báo gcc biên dịch.
- Sửa chữa cho biên soạn với MAKEOBJDIR không trống.
- sửa lỗi typo trong NEW, runcmd.awk, và các trang con người.
là gì mới trong phiên bản 1.4.4:
- Một lỗi trong việc loại bỏ các thư mục con trong một thư mục tạm thời là cố định.
- Cải tiến cho runawk_modules.3.
là gì mới trong phiên bản 1.4.3:
- paexec (1) không sử dụng hệ thống ( 3) nữa để loại bỏ các thư mục tạm thời.
- Các chức năng print_help () được chuyển từ các mô-đun power_getopt.awk để init_getopt.awk.
là gì mới trong phiên bản 1.4.2:
- Phiên bản này cho biết thêm runawk_modules.3 nơi mà tất cả các mô-đun tài liệu, deprecates tùy chọn dài, loại bỏ các tùy chọn -i và -I, và bao gồm các trang người đàn ông trong tarball phân phối nên pod2man là không cần thiết để xây dựng.
là gì mới trong phiên bản 1.4.0:
- Trong exitnow.awk, các exitnow (status) chức năng hiện nay kết thúc việc thực thi kịch bản mà không cần chạy phần END ngay cả khi tình trạng == 0.
- Các mô-đun mới io.awk bao gồm các chức năng is_ {file, thư mục, exec, ổ cắm, FIFO, blockdev, chardev, symlink}, file_size, và FILE_TYPE. tokenre.awk có chức năng splitre0 mới ().
là gì mới trong phiên bản 1.3.2:
- mảng nội đang di chuyển tự động. Điều này sửa chữa sử dụng runawk (1) kết hợp với xargs (1), ví dụ như, mèo files.txt |. Xargs runawk -e '...'
là gì mới trong phiên bản 1.3.0:
- Một sửa chữa cho một thông điệp cảnh báo trình biên dịch C Intel.
- Một sửa chữa cho các shquote function () từ các mô-đun / shquote.awk.
- Các mã nguồn của dự án đã được tổ chức lại, do đó cho phép trình cài đặt dễ dàng các tiểu dự án:. Ví dụ, mô-đun, runawk, alt_getopt, và doc (TODO, README, vv files)
là gì mới trong phiên bản 1.1.0:
- Một tùy chọn đã được thêm vào -F
- ord.awwas New ftrans_in.awk, và các module glob.awk được thu nhận.
- Một alt_getopt thực thi mới được bao gồm cho việc phân tích các tùy chọn ngắn và dài trong một kịch bản.
- min3 mới, min4, min5, min_key, MIN_VALUE, và key_of_min_value (min.awk), và max3, Max4, max5, max_key, max_value, và key_of_max_value (max.awk) chức năng được cung cấp.
- mẫu mới đã được thêm vào:. Ví dụ / demo_minmax, ví dụ / demo_tokenre3, ví dụ / demo_ftrans, ví dụ / demo_glob *
- Một tính năng mới được thêm vào trong multisub.awk.
- cải tiến nhỏ đã được thực hiện trong quá trình cài đặt.
là gì mới trong phiên bản 0.16.0:
- Rất nhiều chương trình demo cho hầu hết các module runawk được tạo ra và họ đang có trong ví dụ / thư mục con bây giờ. Module MEGA mới;-) power_getopt.awk Xem các tài liệu và các chương trình giới thiệu các ví dụ / demo_power_getopt. Nó làm cho các lựa chọn xử lý thực sự dễ dàng. Các thành phần mới: embed_str.awk has_suffix.awk has_prefix.awk readfile.awk modinfo.awk sửa chữa nhỏ và cải tiến trong dirname.awk và basename.awk. Bây giờ họ là hoàn toàn tương thích với dirname (1) và basename (1) RUNAWK đặt các biến môi trường sau đây cho các tiến trình con awk con: RUNAWK_MODC - Một số module (tên tập tin f) thông qua để AWK RUNAWK_MODV_ - đầy đủ đường dẫn đến các mô-đun #n , trong đó n là trong [0..RUNAWK_MODC) phạm vi. RUNAWK đặt biến môi trường RUNAWK_ART_STDIN cho các tiến trình con awk con 1 nếu thêm / nhân tạo '-' được thêm vào danh sách các lập luận của awk. Makefile: bmake-ism đã được gỡ bỏ. Bây giờ Makefile là hoàn toàn tương thích với FreeBSD làm. CLEANFILES mục tiêu được sử dụng thay cho các quy tắc làm bằng tay sửa chữa nhỏ trong 'test_all' mục tiêu
Bình luận không